1. 登录模块实现

  • 所用技术: jwt颁发token,MD5算法加”盐”(随机字符串)进行加密
  • 实现思路

    • 全局过滤器: 因为所有的微服务需要从网关进入,所以将验证token的处理放在网关中,这就需要在网关中创建一个全局过滤器,包含以下部分

      • 过滤器中设计一个白名单,请求如果属于白名单直接放行
      • 如果不属于白名单,则判断token是否存在,若token不存在直接终止请求,返回401
      • 若token存在,判断token是否有效(是否过期)
      • 若token没有过期,则取出其中的userId,并且设置到请求头中(mutate方法),最后放行请求
    • 若未登录访问微服务,则没有token信息,会被网关过滤器拦截,并且返回401(无权限)

    • 所以访问任何微服务之前都需要先登录,经过过滤器筛查后放行,进入AdLoginController检查并返回token信息

      • AdLoginController中的处理
        • 参数校验(用户名,密码不能为空)
        • 根据用户名去ad_user表查询信息得到对应的ApUser对象,可以从中得到密码
        • 再用输入的密码加”盐”,接着用MD5加密得到的新密码与ApUser对象的密码对比
        • 密码相同,检验用户状态是否为9(正常可用),密码不同直接返回
        • 若用户状态为9,则修改用户的最近登录时间(update数据)
        • 最后颁发token
    • 浏览器会存储token信息,之后访问将携带token信息,通过过滤器得到token中的userId,设置到请求头中,方便后续访问微服务.

  • 相关表: ap_user “盐”字段注册后自动生成

    2.app端用户认证

  • 所用技术: Feign

  • 表关系 : ap_user app端用户的注册信息,没有进行实名认证,不可以发文章

    1. ap_user_realname 用户认证表,当app端用户想发表文章时,需要实名认证,需要的信息存在该表<br /> wm_user 自媒体用户表,当app端用户通过实名认证后,会在该表插入对应信息<br />ap_author 文章作者表,当app端用户通过实名认证后,会在该表插入对应信息<br />![image-20210110235514058.png](https://cdn.nlark.com/yuque/0/2021/png/22908560/1637309345784-b5e807e8-bd21-45a8-b87e-f3a1f883ac9c.png#clientId=u4f2f08b7-39a5-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=1576&id=u5ab00837&margin=%5Bobject%20Object%5D&name=image-20210110235514058.png&originHeight=1576&originWidth=2008&originalType=binary&ratio=1&rotation=0&showTitle=false&size=936141&status=done&style=none&taskId=ua409339c-1e7e-4a81-a446-1daf3fa6398&title=&width=2008)
  • 实现思路

    • 参数检验(id 不能为空)
    • 首先根据传过来的id去ap_user_realname表中查找实名认证用户的详细信息得到该用户的审核状态
    • 状态不为1(待审核状态),则无法进行审查
    • 根据实名认证用户的id去ap_user表中查找相关联的申请实名认证的用户的详细信息
    • 根据传过来的状态去修改实名认证用户的状态,通过为9,不通过为2(update数据)
    • 若审核不通过,则直接返回,若审核通过则进行下一步
    • 审核通过需要根据申请实名认证的用户的详细信息创建对应的自媒体用户
      • 当前服务为user服务,创建自媒体用户是自媒体服务,需要使用Feign远程调用
      • 自媒体服务有两个接口,一个是根据用户名查询自媒体用户,一个是保存用户
      • 先调查询用户的方法判断用户是否存在,不存在则可以添加
      • 一个细节,由于创建作者用户需要自媒体用户的ID,所以添加完成后需要将自媒体用户返回
    • 审核通过需要根据申请实名认证的用户的详细信息创建对应的作者用户
      • 整体思路实现思路与自媒体服务相同,
      • 区别是查询用户不再使用用户名,而是使用自媒体用户的ID
    • 返回结果

3.项目中的小细节

  • Feign接口中的方法一定要记得写泛型,不然默认返回的是Map类型