0
点赞
收藏
分享

微信扫一扫

springsecurity&JWT

SpringSecurity&JWT(Springboot)

SpringSecurity&JWT的流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rq2TWTtc-1647762123250)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220320112811436.png)]

登录校验大体流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLwyhs1M-1647762123251)(C:\Users\lenovo\Desktop\SpringSecurity(6)\SpringSecurity\img\image-20211215094003288.png)]

认证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPVgVF5v-1647762123253)(C:\Users\lenovo\Desktop\SpringSecurity(6)\SpringSecurity\img\image-20211214151515385.png)]

Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。

AuthenticationManager接口:定义了认证Authentication的方法

UserDetailsService接口:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的方法。

UserDetails接口:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装成UserDetails对象返回。然后将这些信息封装到Authentication对象中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1sefxh0F-1647762123253)(file://C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220313191723532.png?lastModify=1647746036)]

个人理解:

认证
自定义登录接口,注入AuthenticationManager对象,封装Authentication对象(此时只有密码和用户名),AuthenticationManager调用DaoAuthenticationProvider 的方法认证, DaoAuthenticationProvider 再去调用userDetailsService的实现类 根据用户名 获取用户信息(包括 密码,权限),并返回userDetails对象,再通过PasswordEncoder比较Authentication和UserDetails的密码是否相等,相等就把权限信息存入Authentication中并返回Authentication对象,在Authentication得到用户信息,若认证成功,则使用工具类生成token,放入响应头返回前端,并把用户信息存入到redis中;
校验
登录之后,再访问其他接口获取资源,会通过一个自定义的Filter,用来解析token,得到userid,去redis中拿到用户信息(包括 密码,权限),存入SecurityContextHolder,然后会经过之后的过滤器

授权

设计数据库表,使用注解设置方法权限

例如 @PreAuthorize(“hasAuthority(‘system:test:list111’)”)

注销

hority(‘system:test:list111’)")

注销

从SecurityContextHolder中获取userid,通过userid删除redis中的用户信息即可完成退出系统;

资料或源码私聊或评论

ps:图片转载自B站up主三更

举报

相关推荐

0 条评论