DelegatingFilterProxy
不是 Spring Security 类。它来自 Spring Web 包。
标准 Servlet 2.3 过滤器的代理,委托给实现过滤器接口的 Spring 管理的 bean。支持 web.xml 中的“targetBeanName”过滤器 init-param,在 Spring 应用程序上下文中指定目标 bean 的名称。
当你使用
<http auto-config="true">
</http>
Spring Security 创建(隐式)具有名称的 bean springSecurityFilterChain
(这就是您<filter-name>springSecurityFilterChain</filter-name>
在 中的原因web.xml
)并且所有请求(/*
)都由它(由 Spring Security)处理。
然后配置 Spring Security 并为其提供更具体的 URL ( /*welcome
)。
<intercept-url pattern="/welcome*" access="ROLE_USER" />
这就像在说:
- 所有 URL 请求 (
/*
) 都应由 Spring Security 调查
- 当 URL 匹配时
/welcome*
,主体应该具有ROLE_USER
角色。
如果您的应用程序需要更高级的安全处理,您可以自己创建过滤器链 bean 并手动配置所有过滤器。
例子:
<!-- Filter Chain -->
<bean id="springSecurityFilterChain"
class="org.springframework.security.web.FilterChainProxy">
<constructor-arg>
<list>
<sec:filter-chain pattern="/favicon.ico"
filters="none"/>
<sec:filter-chain pattern="/img/**"
filters="none"/>
<sec:filter-chain pattern="/**"
filters="bannedIPsFilter, <!-- custom filter -->
channelProcessingFilter,
securityContextPersistenceFilter,
concurrentSessionFilter,
logoutFilter,
secondAuthenticationFilter, <!-- custom filter -->
openIDAuthenticationFilter,
usernamePasswordAuthenticationFilter,
anonymousAuthenticationFilter,
captchaFilter, <!-- custom filter -->
sessionManagementFilter,
exceptionTranslationFilter,
filterSecurityInterceptor,
switchUserProcessingFilter"
/>
</list>
</constructor-arg>
</bean>