SpringBoot+SpringSecurity+JWT+Redis实现认证授权 整体思路: 基于汇客CRM项目
前端提交用户名和密码到后端接口方法中,被springsecurity拦截,需要进行用户认证,首先将用户名和密码通过AuthenticationManager接口中的authenticate方法封装成一个Authentication对象但是Authentication是一个接口,要用Authentication的实现类UsernamePasswordAuthenticationToken传入用户名和
流程图
登录流程:
前端提交用户名和密码到后端接口方法中,被 spring security 拦截,需要进行用户认证,首先将用户名和密码通过
AuthenticationManager 接口中的 authenticate 方法封装成一个 Authentication 对象
但是Authentication是一个接口,要用Authentication 的实现类 UsernamePasswordAuthenticationToken 传入用户名和密码参数封装成 Authentication 对象。
然后调用LoadUsername方法取查询用户,因为默认查询的是缓存当中的用户对象,因为我们要去数据库中查询,所以要自己实现 UserDetails 接口重写LoadUsername方法查询用户对象,根据用户名查询对象,如果对象为空,return null,如果查询到对象数据,先将前端传过来的密码进行加密,再与当前用户对象的密码进行比对,默认的加密方式BCryptPasswordEncoder)
认证成功后,将用户对象和权限信息集合一起封装到自己创建的 LoginUser 中(要实现UserDetails 接口)返回回去
通过当前用户去查询数据库 权限关系表 用户表(id) ---角色表 ----菜单表
最后将用户对象 变成 jwt 加密 , 将Token 顺便 放到 redis 中, 返回给前端的UUID
过滤器流程:
1. 判断 请求头上有没有token 的uuid
没有 ----return
有 ----通过 token 的uuid 去查看 redis 中的token
2. Token 进行解析,获取body 那部分信息
3. Session 的数据共享-----将用户对象信息 放到 spring security 的一个本地线程当中SecurityContextHolder
整体思路:
用户输入用户名密码点击登录,前端将请求发送到后端的请求接口,首先被过滤器拦截,判断请求头上有没有携带token的uuid,如果没有,抛出异常,如果有,通过uuid来获取token,然后对token’进行解析,获取body的信息,为了实现后续所有请求的数据共享,将当前用户信息存储到pring security 的一个本地线程当中SecurityContextHolder中
更多推荐
所有评论(0)