SpringSecurity基本原理
SpringSecurity 最核心的东西 其实是一个过滤器链,一组Filter
所有发送的请求都会经过Filter链,同样响应也会经过Filter链,在系统启动的时候springboot会自动的把他们配置进去(Springboot只是一种框架,只是方便了使用,其核心还是一样的)
UsernamePasswordAuthticationFilter 表单登陆
BasicAuthenticationFilter Http登陆
–》
FilterSecurityInterceptor这个过滤器是整个SpringSecurity过滤器链的最后一环
然后进入到ExceptionTranslatonFilter中根据抛出的异常做出决定
断点跟进
1.FilterSecurityInterceptor
// L124
InterceptorStatusToken token = super.beforeInvocation(fi);
2.ExceptionTranslationFilter
// L66
Throwable[] causeChain = this.throwableAnalyzer.determineCauseChain(var10);
3.UsernamePasswordAuthenticationFilter
// L75
String username = obtainUsername(request);
只会处理/login post的请求
// L61
public UsernamePasswordAuthenticationFilter() {
super(new AntPathRequestMatcher("/login", "POST"));
}
4.Controller层执行方法的断点
/**
* security配置
* Created by ZhuPengWei on 2017/11/27.
*/
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin() //表单登陆
.and()
.authorizeRequests() // 请求授权
.anyRequest() // 任何请求
.authenticated(); // 都需要认证
}
}