首页 > 技术文章 > SpringSecurity+JWT 登录认证+鉴权(未完)

chengqiang521 2022-01-12 22:28 原文

登录认证

用户名密码加密存储进入数据库:

BCryptPasswordEncoder 加密解密实现

用户登录进入系统接口:

获取用户名密码+解密,重写UserDetailsService方法通过验证数据库中的用户名密码;


如果密码正确,根据userid生成token,发送给前端进行存储,并把userid:用户信息,这样的键值对存入redis池;


用户进行其他请求时,携带token

认证过滤器:后端接受到前端传递的token,对token里面解析出来是userid;使用userid去redis中获取对应的用户信息LoginUser对象,
redis对象存在,证明当前用户存在,并且已经登录,放行请求;不存在禁止访问当前请求接口

用户注销

后盾根据SecurityContextHolder中的认证信息(类似于gin中的上下文),可以直接获取userid,操作redis池,删除对应的userid键值对

代码内容,后面放github地址

授权

每个接口都有限制访问资源所需权限

使用rbac权限模型来存储每个用户拥有的权限,

用户表--角色表:多对多中间表

角色表--权限表:多对多中间表

通过用户id,多表联查,查出改用户拥有的权限列表[]

未登录的用户:用户登录时,用户密码验证数据库通过,生成的用户对象存在SecurityContextHolder中,同时把userid和权限列表[]存入redis缓存中(留给该用户请求其他接口时进行验证);

已经登录的用户:发起对应接口的请求,查询redis中改用户的权限与当前接口权限比较,如果拥有,就通过;没有就返回权限不足进行拦截

推荐阅读