A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.1 用户认证流程分析
用户认证流程如下:

业务流程说明如下:
1、客户端请求认证服务进行认证。
2、认证服务认证通过向浏览器cookie写入token(身份令牌)
认证服务请求用户中心查询用户信息。
认证服务请求Spring Security申请令牌。 认证服务将token(身份令牌)和jwt令牌存储至redis中。 认证服务向cookie写入 token(身份令牌)。
3、前端携带token请求认证服务获取jwt令牌 前端获取到jwt令牌并存储在sessionStorage。
前端从jwt令牌中解析中用户信息并显示在页面。
4、前端携带cookie中的token身份令牌及jwt令牌访问资源服务 前端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt令牌
前端请求资源服务前在http header上添加jwt请求资源
5、网关校验token的合法性

用户请求必须携带token身份令牌和jwt令牌 网关校验redis中token是否合法,已过期则要求用户重新登录
6、资源服务校验jwt的合法性并完成授权 资源服务校验jwt令牌,完成授权,拥有权限的方法正常执行,没有权限的方法将拒绝访问。

1.2 认证服务查询数据库 1.2.1 需求分析
认证服务根据数据库中的用户信息去校验用户的身份,即校验账号和密码是否匹配。
认证服务不直接连接数据库,而是通过用户中心服务去查询用户中心数据库。


1.2.2 搭建环境 1.2.2.1 创建用户中心数据库
用户中心负责用户管理,包括:用户信息管理、角色管理、权限管理等。
创建xc_user数据库(MySQL)
导入xc_user.sql(已导入不用重复导入)


1.2.4 查询用户接口
完成用户中心根据账号查询用户信息接口功能。 1.2.4.1 Api接口
用户中心对外提供如下接口:
1、响应数据类型

此接口将来被用来查询用户信息及用户权限信息,所以这里定义扩展类型

[AppleScript] 纯文本查看 复制代码
@Data @ToString public class XcUserExt extends XcUser {   
  //权限信息   
  private List<XcMenu> permissions;   
  //企业信息   
  private String companyId; }

2、根据账号查询用户信息

[AppleScript] 纯文本查看 复制代码
@Api(value = "用户中心",description = "用户中心管理") public interface UcenterControllerApi {     public XcUserExt getUserext(String username); }

1.2.4.2 DAO
添加XcUser、XcCompantUser两个表的Dao

[AppleScript] 纯文本查看 复制代码
public interface XcUserRepository extends 
JpaRepository<XcUser, String> {      
   XcUser findXcUserByUsername(String username); 
} 
public interface XcCompanyUserRepository extends JpaRepository<XcCompanyUser,String> { 
    //根据用户id查询所属企业id    
 XcCompanyUser findByUserId(String userId); 
}

1.2.4.2 Service
[AppleScript] 纯文本查看 复制代码
@Service public class UserService {   
    @Autowired   
  private XcUserRepository xcUserRepository;     
  //根据用户账号查询用户信息 
    public XcUser findXcUserByUsername(String username){    
     return xcUserRepository.findXcUserByUsername(username);   
  }   
  //根据账号查询用户的信息,返回用户扩展信息  
   public XcUserExt getUserExt(String username){   
      XcUser xcUser = this.findXcUserByUsername(username);   
      if(xcUser == null){      
       return null;

[AppleScript] 纯文本查看 复制代码
}   
      XcUserExt xcUserExt = new XcUserExt();  
       BeanUtils.copyProperties(xcUser,xcUserExt);    
     //用户id     
    String userId = xcUserExt.getId();    
     //查询用户所属公司       
  XcCompanyUser xcCompanyUser = xcCompanyUserRepository.findXcCompanyUserByUserId(userId);   
      if(xcCompanyUser!=null){       
      String companyId = xcCompanyUser.getCompanyId();      
       xcUserExt.setCompanyId(companyId);    
     }      
   return xcUserExt;  
   } }



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马