SpringSecurity
2024-03-08 09:59:18 0 举报
登录查看完整内容
SpringSecurity全流程讲解
作者其他创作
大纲/内容
ExceptionTranslationFilter
Step 2: 授权开始
否
将LoginUser对象返回
UsernamePasswordAuthenticationFilter
权限不满足: AccessDeniedHandlerImpl implements AccessDeniedHandler
认证请求
从其中获取权限信息
是
.......
FilterSecurityInterceptor
访问受限资源携带Token
响应Token
把authenticationToken对象传递给
满足: 放行
ProviderManager
借用UsernamePasswordAuthenticationToken把UserName和PWD封装成UsernamePasswordAuthenticationToken对象: authenticationToken
抛出异常 throw new RuntimeException(\"用户名或者密码错误\");
LoginServiceImpl
接口
AbstractAuthenticationProcessingFilter
1. 获取token2. 解析token获取其中的userid3. 根据userid从Redis中获取用户信息和权限信息4. 封装成authenticationToken对象5. 将authenticationToken存入SecurityContextHolder供后面的过滤器使用
UserDetailService
UserDetailsServiceImpl
实体类 : LoginUser implements UserDetails
SpringSecurity 过滤器链
数据库
实现类
进行Step 2 : 授权: 将LoginUser中的权限赋予写入到authentication对象中
认证后携带Token访问受限资源
查两个东西: 1. 用户个人相关信息 2. 用户的权限信息
JwtAuthenticationTokenFilter extends OncePerRequestFilter
SecurityContextHolder
OncePerRequestFilter
AuthenticationManager
把查询出来的两部分信息封装成一个实现了UserDetails接口的实体类
前端提交UserName & PWD
认证失败: AuthenticationEntryPointImpl implements AuthenticationEntryPoint
是否一致
是否满足
返回authenticationToken对象
InMemoryDetailManager
AbstractUserDetailsAuthenticationProvider
将获取到的权限信息和用户即将访问的受限资源的权限进行比较
是否查到
通过PasswordEncoder对比authenticationToken和LoginUser的密码是否一致
调用紫色类的 public UserDetails loadUserByUsername(String username)方法
调用DaoAuthenticationProvider的authenticate方法
DaoAuthenticationProvider
0 条评论
回复 删除
下一页