Spring Security中的多个预授权过滤器?
Posted
技术标签:
【中文标题】Spring Security中的多个预授权过滤器?【英文标题】:Multiple pre-auth filters in Spring Security? 【发布时间】:2011-10-29 06:29:42 【问题描述】:我需要多个PRE_AUTH
Spring Security 过滤器。特别是,除了在 Spring Security 3.0 的 SAML 扩展中配置为 PRE_AUTH
的两个过滤器之外,我还需要使用 PRE_AUTH
过滤器。现有的 SAML 配置如下。
<security:http entry-point-ref="samlEntryPoint">
<!-- snip intercepts -->
<security:custom-filter after="BASIC_AUTH_FILTER" ref="samlProcessingFilter"/>
<security:custom-filter before="PRE_AUTH_FILTER" ref="samlEntryPoint"/>
<security:custom-filter position="PRE_AUTH_FILTER" ref="metadataFilter"/>
<security:custom-filter after="LOGOUT_FILTER" ref="samlLogoutFilter"/>
<security:custom-filter before="LOGOUT_FILTER" ref="samlLogoutProcessingFilter"/>
</security:http>
额外的PRE_AUTH
过滤器需要在任何一个现有过滤器之前进行检查(即:不应让使用此身份验证方法进行身份验证的用户有机会使用 SAML。
我考虑用以下方式改变它。
<!-- snip -->
<security:custom-filter before="PRE_AUTH_FILTER" ref="newPreAuthFilter"/>
<security:custom-filter position="PRE_AUTH_FILTER" ref="samlEntryPoint"/>
<security:custom-filter after="PRE_AUTH_FILTER" ref="metadataFilter"/>
<!-- snip -->
这是否可行,或者需要更复杂的解决方案。
【问题讨论】:
【参考方案1】:非常古老的问题,但仍然相关。使用 spring 中的复合过滤器:
<security:custom-filter before="PRE_AUTH_FILTER" ref="compositeAuthFilter"/>
<bean id="compositeAuthFilter" class="org.springframework.web.filter.CompositeFilter">
<property name="filters">
<list>
<ref bean="airlockAuthFilter"/>
<ref bean="samlEntryPoint"/>
<ref bean="metadataFilter"/>
</list>
</property>
</bean>
【讨论】:
以上是关于Spring Security中的多个预授权过滤器?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security源码(一):认证、授权、过滤器链