SpringSecurity&JWT(Springboot)

SpringSecurity&JWT(Springboot)

SpringSecurity&JWT(Springboot)_第1张图片

SpringSecurity&JWT的流程

SpringSecurity&JWT(Springboot)_第2张图片

登录校验大体流程

SpringSecurity&JWT(Springboot)_第3张图片

认证

SpringSecurity&JWT(Springboot)_第4张图片

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

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

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

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

个人理解:
认证
自定义登录接口,注入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’)”)

注销

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

%%资料或源码私聊或评论
%%ps:图片转载自B站up主三更

你可能感兴趣的:(安全框架,intellij,idea,后端,java,安全架构,spring)