分布式新闻项目实战 - 9.后台系统管理
创始人
2024-05-24 12:39:18
0

佳能:感动常在
记得很早之前看过的一个广告:男子拿着妻子的相机发呆,父亲尝试安慰着他,然后接过相机给他拍了张照片,突然他进去了相机的世界,相机里的他一直给父亲做手势,直到父亲翻到了最后一张照片,那一张照片有他的妻子,如愿以偿,男子遇到了他去世的妻子,男子快速在手上写着什么,父亲满含泪水,把照片放大打印出来,手上写的是 Leave me…

在这里插入图片描述


系列文章目录

  1. 项目搭建
  2. App登录及网关
  3. App文章
  4. 自媒体平台(博主后台)
  5. 内容审核(自动)

文章目录

  • 系列文章目录
  • 一、需求分析
  • 二、表结构分析
    • 1. 导入数据库
    • 2. 实体类
      • ⑴. 管理员用户信息表
      • ⑵. APP实名认证信息表
  • 三、后台管理端
    • 1. 创建模块
    • 2. 引导类
    • 3. 微服务配置文件
    • 4. 日志配置文件
    • 5. Nacos
  • 四、登录
    • 1. 接口定义
      • ⑴. 接口说明
      • ⑵. Dto
    • 2. 功能实现
      • ⑴. Controller
      • ⑵. Mapper
      • ⑶. service
      • ⑷. Impl
      • ⑸. Controller
  • 五、gateway网关
    • 1. 创建模块
    • 2. 引导类
    • 3. 配置文件
    • 4. nacos配置
  • 六、测试
  • 七、nginx
    • 1. 导入nginx(这里的nginx包异常)
    • 2. 配置nginx.conf文件
    • 3. 测试




一、需求分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 登录: 用户名和密码、加盐验证
  • 敏感词管理: 游客只有查看的权限
  • 频道管理: 增删改、分页查询、模糊查询
  • 用户审核管理: 分页查询、审核失败、审核成功
  • 自媒体文章人工审核: 分页查询、文章详情、审核失败、审核成功



二、表结构分析

1. 导入数据库

sql文件链接:https://pan.baidu.com/s/1ZditX-YHPKppYt3GveFfbA?pwd=abcd
在这里插入图片描述


2. 实体类

⑴. 管理员用户信息表

新建 heima-leadnews-model\src\main\java\com\heima\model\admin\pojos\AdUser.java 文件:

/*** 

* 管理员用户信息表*

* @author itheima*/ @Data @TableName("ad_user") public class AdUser implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/private Integer id;/*** 登录用户名*/@TableField("name")private String name;/*** 登录密码*/@TableField("password")private String password;/*** 盐*/@TableField("salt")private String salt;/*** 昵称*/@TableField("nickname")private String nickname;/*** 头像*/@TableField("image")private String image;/*** 手机号*/@TableField("phone")private String phone;/*** 状态0 暂时不可用1 永久不可用9 正常可用*/@TableField("status")private Integer status;/*** 邮箱*/@TableField("email")private String email;/*** 最后一次登录时间*/@TableField("login_time")private Date loginTime;/*** 创建时间*/@TableField("created_time")private Date createdTime;}

⑵. APP实名认证信息表

新建 heima-leadnews-model\src\main\java\com\heima\model\admin\pojos\ApUserRealname.java 文件:

/*** 

* APP实名认证信息表*

* @author itheima*/ @Data @TableName("ap_user_realname") public class ApUserRealname implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/@TableId(value = "id", type = IdType.AUTO)private Integer id;/*** 账号ID*/@TableField("user_id")private Integer userId;/*** 用户名称*/@TableField("name")private String name;/*** 资源名称*/@TableField("idno")private String idno;/*** 正面照片*/@TableField("font_image")private String fontImage;/*** 背面照片*/@TableField("back_image")private String backImage;/*** 手持照片*/@TableField("hold_image")private String holdImage;/*** 活体照片*/@TableField("live_image")private String liveImage;/*** 状态0 创建中1 待审核2 审核失败9 审核通过*/@TableField("status")private Short status;/*** 拒绝原因*/@TableField("reason")private String reason;/*** 创建时间*/@TableField("created_time")private Date createdTime;/*** 提交时间*/@TableField("submited_time")private Date submitedTime;/*** 更新时间*/@TableField("updated_time")private Date updatedTime;}



三、后台管理端

1. 创建模块

在这里插入图片描述

2. 引导类

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\AdminApplication.java 文件:

@SpringBootApplication
@EnableDiscoveryClient // 集成当前的注册中心
@MapperScan("com.heima.admin.mapper") // 集成myBatisPlus 扫描mapper
public class AdminApplication {public static void main(String[] args) {SpringApplication.run(AdminApplication.class, args);}
}

3. 微服务配置文件

新建 heima-leadnews-service\heima-leadnews-admin\src\main\resources\bootstrap.yml 文件:

server:port: 51809
spring:application:name: leadnews-admincloud:nacos:discovery:server-addr: 192.168.200.130:8848config:server-addr: 192.168.200.130:8848file-extension: yml

4. 日志配置文件

新建 heima-leadnews-service\heima-leadnews-admin\src\main\resources\logback.xml 文件:

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%nutf8${LOG_HOME}/leadnews.%d{yyyy-MM-dd}.log%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n0512

5. Nacos

新建 leadnews-admin 配置:

spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/leadnews_admin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=falseusername: rootpassword: 123456
# 设置Mapper接口所对应的XML文件位置,如果你在Mapper接口中有自定义方法,需要进行该配置
mybatis-plus:mapper-locations: classpath*:mapper/*.xml# 设置别名包扫描路径,通过该属性可以给包中的类注册别名type-aliases-package: com.heima.model.admin.pojos



四、登录

1. 接口定义

⑴. 接口说明

接口地址:/login/in
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:

{"name": "","password": ""
}

请求参数:

参数名称参数说明in是否必须数据类型schema
dtodtobodytrueAdUserDtoAdUserDto
  nametruestring
  passwordtruestring

响应状态:

状态码说明schema
200OKResponseResult
201Created
401Unauthorized
403Forbidden
404Not Found

响应参数:

参数名称参数说明类型schema
codeinteger(int32)integer(int32)
dataobject
errorMessagestring
hoststring

响应示例:

{"host":null,"code":1002,"errorMessage":"数据不存在","data":null
}
{"host":null,"code":2,"errorMessage":"密码错误","data":null
}{"host":null,"code":200,"errorMessage":"操作成功","data":{"user":{"id":"3","name":"guest","password":"","salt":"","nickname":"gu","image":null,"phone":"13412345676","status":1,"email":"guest@qq.com","loginTime":1596092403000,"createdTime":1596092406000},"token":"..."}
}

⑵. Dto

新建 heima-leadnews-model\src\main\java\com\heima\model\admin\dtos\AdLoginDto.java 文件:

@Data
public class AdLoginDto {/*** 用户名*/private String name;/*** 密码*/private String password;
}

2. 功能实现

⑴. Controller

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\controller\v1\LoginController.java 文件:

@RestController
@RequestMapping("/api/v1/admin/login")
public class LoginController {@PostMapping("/in")public ResponseResult login(@RequestBody AdLoginDto adLoginDto) {return null;}
}

⑵. Mapper

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\mapper\AdUserMapper.java 文件:

public interface AdUserMapper extends BaseMapper {
}

⑶. service

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\service\AdUserService.java 文件:

public interface AdUserService {/*** 后台系统登录* @param adminLoginDto* @return*/public ResponseResult login(AdLoginDto adminLoginDto);
}

⑷. Impl

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\service\impl\AdUserServiceImpl.java 文件:

@Service
@Slf4j
public class AdUserServiceImpl extends ServiceImpl implements AdUserService {/*** 后台系统登录* @param dto* @return*/@Overridepublic ResponseResult login(AdLoginDto dto) {//1.检查参数if (StringUtils.isBlank(dto.getName()) || StringUtils.isBlank(dto.getPassword())) {return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "用户名或密码为空");}//2.查询用户AdUser adUser = getOne(Wrappers.lambdaQuery().eq(AdUser::getName, dto.getName()));if (adUser == null) {return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);}//3.比对密码String salt = adUser.getSalt();String pswd = dto.getPassword();pswd = DigestUtils.md5DigestAsHex((pswd + salt).getBytes());if (pswd.equals(adUser.getPassword())) {//4.返回数据  jwtMap map = new HashMap<>();map.put("token", AppJwtUtil.getToken(adUser.getId().longValue()));adUser.setSalt("");adUser.setPassword("");map.put("user", adUser);return ResponseResult.okResult(map);} else {return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);}}
}

⑸. Controller

编辑 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\controller\v1\LoginController.java 文件:

@RestController
@RequestMapping("/api/v1/admin/login")
public class LoginController {@Autowiredprivate AdUserService adUserService;@PostMapping("/in")public ResponseResult login(@RequestBody AdLoginDto adLoginDto) {return adUserService.login(adLoginDto);}
}



五、gateway网关

1. 创建模块

  • heima-leadnews-gateway 网关
    • heima-leadnews-admin-gateway 系统管理平台
    • heima-leadnews-wemedia-gateway 用户自媒体平台
    • heima-leadnews-app-gateway 用户移动APP
      在这里插入图片描述

2. 引导类

新建 heima-leadnews-gateway\heima-leadnews-admin-gateway\src\main\java\com\heima\admin\gateway\AdminGatewayApplication.java 文件:

@SpringBootApplication
@EnableDiscoveryClient
public class AdminGatewayApplication {public static void main(String[] args) {SpringApplication.run(AdminGatewayApplication.class, args);}
}

3. 配置文件

新建 heima-leadnews-gateway\heima-leadnews-admin-gateway\src\main\resources\bootstrap.yml 文件:

server:port: 51603
spring:application:name: leadnews-admin-gatewaycloud:nacos:discovery:server-addr: 192.168.200.130:8848config:server-addr: 192.168.200.130:8848file-extension: yml

4. nacos配置

nocos地址: http://192.168.200.130:8848/nacos
新建 leadnews-admin-gateway 配置:

spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecors-configurations:'[/**]': # 匹配所有请求allowedOrigins: "*" #跨域处理 允许所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETE- OPTIONroutes:# 平台管理- id: service_6001uri: lb://leadnews-adminpredicates:- Path=/service_6001/**filters:- StripPrefix= 1



六、测试

启动项目网关和后台微服务两个服务,使用postman进行测试

网关后的请求地址: http://localhost:51809/api/v1/admin/login/in
在这里插入图片描述




七、nginx

1. 导入nginx(这里的nginx包异常)

资源链接: https://pan.baidu.com/s/1R7akEh2ceQNH8CL2pwV-uA?pwd=abcd

解压至 nginx 目录下(同自媒体端nginx)


2. 配置nginx.conf文件

(nginx包中)新建 D:\code\hm\leadnews\config\nginx-1.18.0\conf\leadnews.conf\heima-leadnews-admin.conf 文件:

upstream  heima-admin-gateway{server localhost:51603;
}server {listen 8803;location / {root D:/code/hm/leadnews/config/admin-web/;index index.html;}location ~/service_6001/(.*) {proxy_pass http://heima-admin-gateway/$1;proxy_set_header HOST $host;  # 不改变源请求头的值proxy_pass_request_body on;  #开启获取请求体proxy_pass_request_headers on;  #开启获取请求头proxy_set_header X-Real-IP $remote_addr;   # 记录真实发出请求的客户端IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #记录代理信息}
}

3. 测试

启动nginx,启动后台微服务和后台网关,后台系统地址: http://localhost:8803/#/login
在这里插入图片描述



相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...