spring security认证过程知识整理

基本功能:认证

一、Spring Security 核心组件
	**Authentication**:interface	:用来携带认证信息。认证信息包括用户身份信息,密码,及权限列表等
						它的实现类,表示当前访问系统的用户,封装了用户相关信息。
	
	**UsernamePasswordAuthenticationFilter**:Filter	:账号密码认证过滤器,用于认证用户信息,认证方式是由 AuthenticationManager 接口提供。 
	
	**AuthenticationManager**:interface	:认证管理器,是认证相关的核心接口,也是发起认证的出发点。
							实际业务中可能根据不同的信息进行认证,所以Spring推荐通过实现 AuthenticationManager 接口来自定义自己的认证方式。
							Spring 提供了一个默认的实现 ProviderManager。
	
	**ProviderManager**:认证提供者管理器,该类中维护了一个认证提供者(?)列表,只要这个列表中的任何一个认证提供者提供的认证方式认证通过,认证就结束。
	**AuthenticationProvider**:interface:认证提供者,具体如何认证,就看如何实现该接口;Spring Security 提供了 DaoAuthenticationProvider 实现该接口,这个类就是使用数据库中数据进行认证。
	**UserDetailsService**:interface:根据用户名获取用户详细信息
	**UserDetails**:pojo:用户的详细信息,主要用于登录认证。
	**SecurityContext**:SecurityContext 负责存储认证通过的用户信息(Authentication对象),保存着当前用户是什么,是否已经通过认证,拥有哪些权限等等。
	**SecurityContextHolder**	:	SecurityContextHolder 是最基本的对象,它负责存储当前 SecurityContext 信息。SecurityContextHolder默认使用 ThreadLocal 来存储认证信息,意味着这是一种与线程绑定的策略。在Web场景下的使用Spring Security,在用户登录时自动绑定认证信息到当前线程,在用户退出时,自动清除当前线程的认证信息。
	
	**AuthenticationSuccessHandler**	:	主要用于认证成功后的处理,比如返回页面或者数据。
	**AuthenticationFailureHandler**	:	主要用于认证失败后的处理,比如返回页面或者数据。
	**AccessDecisionManager**		:	主要用于实现权限,决定请求是否具有访问的权限。
	**AccessDeniedHandler**		:	主要用于无权访问时的处理
	
Authentication接口: 它的实现类,表示当前访问系统的用户,封装了用户相关信息。
AuthenticationManager接口:定义了认证Authentication的方法
UserDetailsService接口:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的方法。
UserDetails接口:提供核心用户信息。通过UserDetailsService根据用户名获取处理的用户信息要封装成UserDetails对象返回。然后将这些信息封装到Authentication对象中。

二、Spring Security 工作流程
1.DelegatingFilterProxy
2.FilterChainProxy
	WebAsyncManagerIntegrationFilter
	SecurityContextPersistenceFilter
	HeaderWriterFilter
	CsrfFilter
	LogoutFilter
	UsernamePasswordAuthenticationFilter		:重点:用于处理基于表单的登录请求,从表单中获取用户名和密码,默认情况下处理来自/login的请求,从表单中获取用户名和密码, 默认使用表单name值为username和password,这两个值可以通过这个过滤器的usernaemparamter个passwordParameter连个参数的值进行修改
	DefaultLoginPageGeneratingFilter
	BasicAuthenticationFilter				:检测和处理http basic认证
	RequestCacheAwareFilter			:用于处理请求的缓存
	SecurityContextHolderAwareRequestFilter		:主要包装请求对象request
	AnonymousAuthenticationFilter			:检测SecurityContextHolder中是否存在Authentication对象,如果不存在为其提供一个匿名Authentication
	SessionManagementFilter			:管理session的过滤器
	ExceptionTranslationFilter			:处理AccessDeniedException和AuthenticationException异常
	FilterSecurityInterceptor				:可以看作过滤器链的出口
	RememberMeAuthenticationFilter		:当用户没有登录而直接访问资源时,从cookie中找出用户的信息,如果SpringSecurity能够识别出用户提供remember me cookie ,用户将不必填写用户名和密码,而是直接登录进入系统,该过滤器默认从不开启

三、Spring Security 认证过程
	(一)request
	(二)->UsernamePasswordAuthenticationFilter:
		1获取用户名密码
		2基于用户名密码构建token
			(1)AuthenticationManager
			(2)AuthenticationProvider
			(3)UserDetailsService
			(4)PasswordEncoder
		3构建token成功
		
	(三)->AbstractAuthenticationProcessingFilter:判断处理结果,调用AuthenticationSuccessHandler&AuthenticationFailureHandler
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值