SpringSecurity 核心组件介绍 + 认证流程 +内置拦截器顺序

目录

一、SpringSecurity 核心组件介绍

SecurityContextHolder

 SecurityContext

 AuthenticationManager 

ProviderManager

AuthenticationProvider 

Authentication

GrantedAuthority

UserDetails

UserDetailsService

二、认证流程

1、图片流程

2、在SpringBoot中的代码实现

待续写~~~~~~~~~~ 

 三、spring security 内置拦截器顺序及用途


一、SpringSecurity 核心组件介绍

SecurityContextHolder

SecurityContextHolder它持有的是安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权等等,这些都被保存

SecurityContextHolder默认使用ThreadLocal 策略来存储认证信息。看到ThreadLocal 也就意味着,这是一种与线程绑定的策略。在web环境下,Spring Security在用户登录时自动绑定认证信息到当前线程,在用户退出时,自动清除当前线程的认证信息。

 SecurityContext

持有Authentication对象和其他可能需要的信息

 AuthenticationManager 

  AuthenticationManager 其中可以包含多个AuthenticationProvider

ProviderManager

  ProviderManager对象为AuthenticationManager接口的实现类

AuthenticationProvider 

 AuthenticationProvider 主要用来进行认证操作的类 调用其中的authenticate()方法去进行认证操作

Authentication

  Authentication:Spring Security方式的认证主体

鉴权对象,该对象主要包含了用户的详细信息(UserDetails)和用户鉴权时所需要的信息,如用户提交的用户名密码、Remember-me Token,或者digest hash值等,

GrantedAuthority

 GrantedAuthority:对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示

UserDetails

 UserDetails:构建Authentication对象必须的信息,可以自定义,可能需要访问DB得到

这个接口规范了用户详细信息所拥有的字段,譬如用户名、密码、账号是否过期、是否锁定等。在Spring Security中,获取当前登录的用户的信息,一般情况是需要在这个接口上面进行扩展,用来对接自己系统的用户

UserDetailsService

 UserDetailsService:通过username构建UserDetails对象,通过loadUserByUsername根据userName获取UserDetail对象 (可以在这里基于自身业务进行自定义的实现  如通过数据库,xml,缓存获取等)     

通过扩展这个接口来显示获取我们的用户信息,用户登陆时传递的用户名和密码也是通过这里这查找出来的用户名和密码进行校验,但是真正的校验不在这里,而是由AuthenticationManager以及AuthenticationProvider负责的,需要强调的是,如果用户不存在,不应返回NULL,而要抛出异常UsernameNotFoundException

二、认证流程

1、图片流程

整体流程:

(上图来自:https://segmentfault.com/a/1190000016503859   小编在此表示感谢) 

这样理解也行:

认证详细流程:

认证完成后: 

2、在SpringBoot中的代码实现

待续写~~~~~~~~~~ 

 三、spring security 内置拦截器顺序及用途

1、ChannelProcessingFilter,使用它因为我们可能会指向不同的协议(如:Http,Https)

2、SecurityContextPersistenceFilter,负责从SecurityContextRepository 获取或存储 SecurityContext。SecurityContext 代表了用户安全和认证过的session

3、ConcurrentSessionFilter,使用SecurityContextHolder的功能,更新来自“安全对象”不间断的请求,进而更新SessionRegistry

4、认证进行机制,UsernamePasswordAuthenticationFilter,CasAuthenticationFilter,BasicAuthenticationFilter等等--SecurityContextHolder可能会修改含有Authentication这样认证信息的token值

5、SecurityContextHolderAwareRequestFilter,如果你想用它的话,需要初始化spring security中的HttpServletRequestWrapper到你的servlet容器中。

6、JaasApiIntegrationFilter,如果JaasAuthenticationToken在SecurityContextHolder的上下文中,在过滤器链中JaasAuthenticationToken将作为一个对象。

7、RememberMeAuthenticationFilter,如果还没有新的认证程序机制更新SecurityContextHolder,并且请求已经被一个“记住我”的服务替代,那么将会有一个Authentication对象将存放到这(就是 已经作为cookie请求的内容)。

8、AnonymousAuthenticationFilter,如果没有任何认证程序机制更新SecurityContextHolder,一个匿名的对象将存放到这。

9、ExceptionTranslationFilter,为了捕获spring security的错误,所以一个http响应将返回一个Exception或是触发AuthenticationEntryPoint。

10、FilterSecurityInterceptor,当连接被拒绝时,保护web URLS并且抛出异常。

 该部分,参考自博文:https://segmentfault.com/a/1190000012668936   详情请阅读该文。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值