在使用Spring Security进行应用程序的身份验证和授权时,它通过DelegatingFilterProxy和FilterChainProxy两个关键组件来实现安全过滤器链的管理。尽管它们似乎有相似的职责,但它们在Spring Security的工作流程中扮演着不同的角色。
DelegatingFilterProxy
DelegatingFilterProxy是Spring MVC框架提供的一个Servlet Filter。它充当了真正的过滤器链和Spring应用程序上下文之间的桥梁。当容器加载应用程序的WebApplicationContext时,DelegatingFilterProxy会作为一个Servlet Filter配置的Bean被实例化。
DelegatingFilterProxy的主要职责是将HTTP请求委托给Spring应用程序上下文中配置的实际的Spring Security过滤器链。这个过程发生在请求到达过滤器链条之前。它通过获取Servlet的FilterChain并挂接一个Invoker(FilterChainProxy)来实现。
下面是DelegatingFilterProxy使用Spring Security过滤器链的示例配置:
<filter>
<filter-name>delegatingFilterProxy</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>delegatingFilterProxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
FilterChainProxy
FilterChainProxy是Spring Security框架提供的一个Servlet Filter。它是实际的安全过滤器链的入口点。当请求到达过滤器链时,FilterChainProxy会根据请求的URL和配置的安全规则来确定应用于请求的过滤器链。
FilterChainProxy的主要职责是将HTTP请求委托给正确的安全过滤器链。它使用Spring Security配置中定义的一系列SecurityFilterChain来实现这一点。每个SecurityFilterChain都包含了一组安全过滤器,每个过滤器负责执行不同的安全任务(例如身份验证、授权等)。
下面是FilterChainProxy的示例配置:
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
<sec:filter-chain-map path-type="ant">
<sec:filter-chain pattern="/secure/**" filters="authFilter, accessFilter" />
<sec:filter-chain pattern="/**" filters="anonFilter" />
</sec:filter-chain-map>
</bean>
在上面的示例中,除了匹配/secure/**
路径模式外,所有请求都将被anonFilter
过滤器链处理。
关系
DelegatingFilterProxy和FilterChainProxy在Spring Security中起着不可或缺的作用。它们的关系如下:
- DelegatingFilterProxy是FilterChainProxy的Invoker。它负责将请求委托给正确的FilterChainProxy来处理。
- FilterChainProxy是实际的安全过滤器链的入口点。它负责根据请求的URL和安全规则来确定应用于请求的过滤器链。
通过DelegatingFilterProxy和FilterChainProxy的协同工作,Spring Security能够在应用程序中有效地处理身份验证和授权请求,并提供细粒度的访问控制。
希望以上内容能够帮助你更好地理解Spring Security DelegatingFilterProxy和FilterChainProxy之间的关系。
本文来自极简博客,作者:开发者故事集,转载请注明原文链接:Spring Security DelegatingFilterProxy与FilterChainProxy关系