【发布时间】:2012-08-05 07:30:27
【问题描述】:
如何将标准 Http 过滤器的多个自定义实现添加到 Spring Security 命名空间 FilterChainProxy?我知道我可以通过使用 after、before 或 position 属性向链中添加一个过滤器。但是如何添加多个过滤器?这是我的安全配置文件
<http pattern="/javax.faces.resource/**" security="none"/>
<http pattern="/resources/**" security="none"/>
<http pattern="/session_list.jsp" security="none"/>
<http pattern="/security/cas_logout.jsf" security="none"/>
<http pattern="/user/account_signup.jsf" security="none"/>
<http pattern="/user/company_user_association.jsf" security="none"/>
<http pattern="/user/account_signup_review.jsf" security="none"/>
<http auto-config="true" use-expressions="true" entry-point-ref="casEntryPoint" access-decision-manager-ref="accessDecisionManager">
<intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
<logout logout-success-url="/security/cas_logout.jsf" invalidate-session="true"/>
<custom-filter position="CAS_FILTER" ref="casFilter"/>
<custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
<custom-filter ref="singleLogoutFilter" before="CAS_FILTER"/>
</http>
<beans:bean id="portalSessionFilter" class="org.x.web.security.PortalSessionInterceptor"/>
<beans:bean id="requestUrlStackFilter" class="org.x.web.security.RequestUrlStackFilter"/>
我想将 portalSessionFilter 和 requestUrlStackFilter 添加到上面的过滤器链中。我可以做到这一点
<custom-filter ref="portalSessionFilter" before="LAST"/>
但是如何在 LAST 之前和 portalSessionFilter 之后添加 requestUrlStackFilter 顺便说一句,它们都是简单的 GenericFilterBean 实现。
我尝试创建另一个 FilterChainProxy bean,在其链列表中使用上述两个过滤器,并将该 bean 作为自定义过滤器添加到 LAST 之前的命名空间配置,过滤器似乎可以工作,但我的 JSF 导航坏了,尤其是 commandLink(我认为使用此 FilterChainProxy 时 AJAX 调用失败)
任何人都可以就如何将这两个过滤器和其他可能的过滤器添加到 Spring Security 过滤器链中提出任何想法吗?
【问题讨论】:
-
正如post 中提到的,我最多只能放置 3 个这样的位置:
因为 SwitchUserFilter 是标准顺序中的最后一个。
标签: jsf-2 spring-security