spring security之 默认登录页源码跟踪
2021年的最后2个月,立个flag,要把 Spring Security 和 Spring Security OAuth2 的应用及主流程源码研究透彻!
项目中使用过Spring Security的童鞋都知道,当我们没有单独自定义登录页时,Spring Security自己在初始化的时候会帮我们配置一个默认的登录页,之前一直疑问默认登录页是怎么配置的,今晚特地找了源码跟一下。
springboot项目依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在项目中随意编写一个接口,然后进行访问
@GetMapping("/")
public String hello() {
return "hello, spring security";
}
在tomcat默认端口8080, localhost:8080 下访问该接口,spring security会帮我们将路径重定向到默认的登录页
那么这个默认页是怎么来的呢?
原来Spring Security有一个默认的 WebSecurityConfigurerAdapter ,发现其中有一个 init 方法,于是在这个方法打了断点,在应用启动的时候进行跟踪。
跟踪 getHttp() 方法, this.disableDefaults 变量默认为false,意味着将会执行 applyDefaultConfiguration(this.http);
方法。查看 applyDefaultConfiguration
方法
public void init(WebSecurity web) throws Exception {
// 首先配置security要拦截的哪些http请求
HttpSecurity http = getHttp();
web.addSecurityFilterChainBuilder(http).postBuildAction(() -> {
FilterSecurityInterceptor securityInterceptor = http.getSharedObject(FilterSecurityInterceptor.class);
web.securityInterceptor(securityInterceptor);
});
}
protected final HttpSecurity getHttp() throw