SpringSecurity学习总结

SpringSecurity

主要功能

认证Authentication、授权Authorization

认证执行流程

0、配置SecurityConfig,放行特定的请求路径,在UsernamePasswordAuthenticationFilter过滤器之前添加自定义过滤器JwtAuthenticationTokenFilter
1、前端发送请求,form表单中必须有username,password
2、经过自定义的JwtAuthenticationTokenFilter过滤器,
	从请求头中获取token
		token为空 --> 未登录 --> 放行
		token不为空 --> 已登录
			a.解析token,获取其中的userId
			b.根据userId,获取redis中的用户信息
			c.将用户信息存储到SecurityContextHolder中
3、执行对应的Service方法,进行逻辑处理后通过Authentication authentication = authenticationManager.authenticate(authenticationToken);调用实现了UserDetailsService的类
4、通过实现UserDetailsService接口,重写loadUserByUsername方法,获取数据库信息与提交用户信息比对,更换密码加密策略,期间出现差错抛出异常,最后封装查询结果信息到UserDetails子类中。
5、由于方法返回值为UserDetails,自定义LoginUser实现UserDetails接口,重写其中的方法,将业务信息和UserDetails原本的信息全部返回。
6、由于SpringSecurity默认的密码加密并不适用,通常我们需要重写。使用BCryptPasswordEncoder进行加密,与数据库比对校验。
7、在接口中我们通过AuthenticationManager的authenticate方法来进行用户认证,所以需要在
SecurityConfig中配置把AuthenticationManager注入容器。认证成功的话要生成一个jwt,放入响应中返回。并且为了让用户下回请求时能通过jwt识别出具体的是哪个用户,我们需要把用户信息存入redis,可以把用户id作为key。

授权执行流程

原理分析

核心流程

在这里插入图片描述
UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请
求。入门案例的认证工作主要有它负责。
ExceptionTranslationFilter:处理过滤器链中抛出的任何AccessDeniedException和
AuthenticationException 。
FilterSecurityInterceptor:负责权限校验的过滤器。

认证流程

在这里插入图片描述
Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。
AuthenticationManager接口:定义了认证Authentication的方法
UserDetailsService接口:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的
方法。
UserDetails接口:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装
成UserDetails对象返回。然后将这些信息封装到Authentication对象中。

授权流程

在SpringSecurity中,会使用默认的FilterSecurityInterceptor来进行权限校验。在
FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication,然后获取其中的
权限信息。当前用户是否拥有访问当前资源所需的权限。
所以我们在项目中只需要把当前登录用户的权限信息也存入Authentication。
然后设置我们的资源所需要的权限即可。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值