> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/untitled-3/untitled-5/untitled-1.md).

# 9.1.2　过滤 Web 请求

Spring Security 借助一系列 Servlet Filter 来提供各种安全性功能。你可能会想，这是否意味着我们需要在 web.xml 或 WebApplicationInitializer 中配置多个 Filter 呢？实际上，借助于 Spring 的小技巧，我们只需配置一个 Filter 就可以了。

DelegatingFilterProxy 是一个特殊的 Servlet Filter，它本身所做的工作并不多。只是将工作委托给一个 javax.servlet.Filter 实现类，这个实现类作为一个注册在 Spring 应用的上下文中， 如图 9.1 所示。

![图 9.1　DelegatingFilterProxy 把 Filter 的处理逻辑委托给 Spring 应用上下文中所定义的一个代理 Filter bean](https://3784153818-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LmcjU5gG__lBrRbUxBO%2F-LnGu6bgwiA2GnSvlRls%2F-LnGuRaW94jd-DldRJ-N%2F9.1%20filter%20bean.jpg?alt=media\&token=cfb4c28d-7682-4b77-b979-6098da69bf37)

如果你喜欢在传统的 web.xml 中配置 Servlet 和 Filter 的话，可以使用 `<filter>` 元素，如下所示：

```markup
<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>
    org.springframework.web.filter.DelegatingFilteProxy
  </filter-class>
</filter>
```

在这里，最重要的是 `<filter-name>` 设置成了 springSecurityFilterChain。这是因为我们马上就会将 Spring Security 配置在 Web 安全性之中，这里会有一个名为 springSecurityFilterChain 的 Filter bean，DelegatingFilterProxy 会将过滤逻辑委托给它。

如果你希望借助 WebApplicationInitializer 以 Java 的方式来配置 Delegating-FilterProxy 的话，那么我们所需要做的就是创建一个扩展的新类：

```java
package spitter.config;
import org.springframwork.security.web.context.AbstractSecurityWebApplicationInitializer;

public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer{
}
```

AbstractSecurityWebApplicationInitializer 实现了 WebApplicationInitializer，因此 Spring 会发现它，并用它在 Web 容器中注册 DelegatingFilterProxy。尽管我们可以重载它的 appendFilters() 或 insertFilters() 方法来注册自己选择的 Filter，但是要注册 DelegatingFilterProxy 的话，我们并不需要重载任何方法。

不管我们通过 web.xml 还是通过 AbstractSecurityWebApplicationInitializer 的子类来配置 DelegatingFilterProxy，它都会拦截发往应用中的请求，并将请求委托给 ID 为 springSecurityFilterChain bean。

springSecurityFilterChain 本身是另一个特殊的 Filter，它也被称为FilterChain-Proxy。它可以链接任意一个或多个其他的 Filter。Spring Security 依赖一系列 Servlet Filter 来提供不同的安全特性。但是，你几乎不需要知道这些细节，因为你不需要显式声明 springSecurityFilterChain 以及它所链接在一起的其他  Filter。当我们启用 Web 安全性的时候，会自动创建这些 Filter。

为了让 Web 安全性运行起来，我们创建一个最简单的安全性配置。
