SpringSecurity 5.7 的 public SecurityFilterChain filterChain(HttpSecurity http) throws Exception 详解
时间: 2024-02-22 11:25:57 浏览: 119
在 Spring Security 中,SecurityFilterChain 是一个过滤器链条,负责对请求进行安全控制。在 Spring Security 5.7 中,SecurityFilterChain 的 filterChain 方法是用来创建这个过滤器链的。
该方法的参数 HttpSecurity 是用来配置安全控制的对象,也就是说,我们可以利用这个对象来添加一些安全控制相关的配置。例如:
```
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/public/**").permitAll()
.antMatchers("/private/**").authenticated()
.and()
.formLogin();
}
```
以上代码中,我们通过 `http.authorizeRequests()` 方法来配置请求授权规则(即哪些请求需要授权),然后通过 `http.formLogin()` 方法来配置登录认证相关的信息。
接下来,我们就来看一下 filterChain 方法的具体实现。该方法返回的是一个 SecurityFilterChain 对象,它包含了一个过滤器链条(即一个 FilterList 对象)。而这个过滤器链条中包含了多个过滤器,每个过滤器都负责不同的安全控制操作。
在 filterChain 方法中,Spring Security 会通过一系列的过滤器来完成安全控制。这些过滤器包括了:
- ChannelProcessingFilter:用来控制请求的协议类型(HTTP 或 HTTPS)。
- SecurityContextPersistenceFilter:用来持久化 SecurityContext 对象。
- ConcurrentSessionFilter:用来控制同一用户的并发登录会话数。
- LogoutFilter:用来处理用户退出登录相关的逻辑。
- UsernamePasswordAuthenticationFilter:用来处理基于表单的登录认证逻辑。
- RequestCacheAwareFilter:用来处理请求缓存相关的逻辑。
- SecurityContextHolderAwareRequestFilter:用来为请求添加 SecurityContextHolderAwareRequestWrapper 包装器,以便在请求中获取当前用户的安全上下文信息。
- AnonymousAuthenticationFilter:用来处理匿名用户的逻辑。
- SessionManagementFilter:用来管理用户的会话信息。
- ExceptionTranslationFilter:用来处理异常信息。
- FilterSecurityInterceptor:用来控制访问资源的权限。
在 filterChain 方法中,我们可以通过一系列的 `http.addFilterBefore(filter, beforeFilter)` 或 `http.addFilterAfter(filter, afterFilter)` 方法来添加自定义的过滤器,并且指定它们的位置。这样,我们就可以在 Spring Security 的过滤器链中添加我们自己的安全控制逻辑了。
阅读全文