SpringSecurity粗略流程

1、本质是过滤链

一、关于配置

1、继承WebSecurityConfigurerAdapter类

2、重写两个configure,一个是配置认证策略,一个是配置AuthenticationManagerBuilder,配置它的用户信息,它是AnthenticationManager构建者

二、基本流程

1、首先UsernamePasswordAuthenticationFilter过滤请求,默认是过滤POST的/login请求,获取username和password,用UsernamePasswordAuthenticationToken包装(它就实现了Authentication)。

2、UsernamePasswordAuthenticationToken作为参数调用AuthenticationManager的authentication()方法,它是一个认证管理器(接口),有很多认证实现类,默认实现类是ProviderManager,ProviderManager管理许多AuthenticationProvider(认证器),遍历找到适合的认证器去认证。

3、认证器会调用之前实现的UserDetailSevice接口,继承loadUserByUsername方法,这里去数据库获取用户信息,然后返回一个UserDetail对象。

4、认证器拿到UserDetail后,做一些判断没问题后,返回一个authentication对象

三、如何实现共享

1、最开始请求先经过SecurityContextPersistenceFilter过滤器,目的就是检查session是否有SecurityContext信息(里边包含authentication信息),没有就new一个,又把SecurityContext放到SecurityContextHolder 中,响应的时候是从该线程获取新的authentication,然后放到SecurityContext中。

2、FilterSecurityInterceptor负责把认证对象放到请求中。如果前边认证成功,就把认证信息放到线程中,如果需要认证就直接跳转到认证页面。

原文地址:https://www.cnblogs.com/liuyu666/p/14312049.html