当前位置: 首页 > 知识库问答 >
问题:

向SpringSecurity命名空间FilterChain添加多个筛选器

彭霄
2023-03-14
<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"/>
<custom-filter ref="portalSessionFilter" before="LAST"/>

我尝试创建另一个FilterChainProxy bean,在其链列表中包含上述两个过滤器,并将该bean作为自定义过滤器添加到之前的名称空间配置中,过滤器似乎可以工作,但我的JSF导航中断了,特别是在commandLink中(我认为使用此FilterChainProxy时AJAX调用失败)

有没有人可以就如何将这两个过滤器和可能的其他过滤器添加到Spring Security过滤器链提出任何想法?

共有1个答案

卢枫涟
2023-03-14

我找到了解决问题的办法。我通过实现自己的过滤器链而不是使用spring security filter chain代理链接我的过滤器来解决它。FilterChainProxy的问题是它在过滤器链的末尾使用了reset方法,如果您将它注入到主Spring Security过滤器链代理之间,这将导致问题。

自定义筛选器链只是处理所需的筛选器,并将控制权交还给主spring security FilterChainProxy。以下是配置在更改后的处理方式

<http auto-config="false" 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"/>
    <custom-filter ref="customFilterChain" before="LAST"/>
</http>

<beans:bean id="customFilterChain" class="org.x.web.security.CustomFilterChain">
<beans:constructor-arg>
    <beans:list>
        <filter-chain pattern="/javax.faces.resource/**" filters="none"/>
        <filter-chain pattern="/resources/**" filters="none"/>
        <filter-chain pattern="/**" filters="portalSessionFilter,requestUrlStackFilter"/>
    </beans:list>
</beans:constructor-arg>
 类似资料:
  • 我正在生成一个XML Xades签名。我需要在标记签名中添加名称空间http://uri.etsi.org/01903/v1.3.2#。 如果我在对文档签名后添加此标记,我将得到无效签名错误。 我需要命名空间将在标记签名中而不是标记对象中

  • 我正在创建一个基于以下代码的动态sitemap.xml 这是可行的,但Google不高兴“urlset”节点中没有Namespace声明。Google错误:“您的Sitemap或Sitemap索引文件未声明预期的命名空间:http://www.sitemaps.org/schemas/sitemap/0.9" 如果我将代码更改为: 它无法生成xml文件并引用以下内容: 在测试中,我发现节点需要一个

  • 我使用SpringBoot创建了一个SOAP Web服务服务器,并且我能够成功创建一个endpoint。但是,我无法创建多个endpoint并使用不同的URL访问它们。我想通过URL来访问处理该过程。 每个endpoint接收到的SOAP消息具有相同的模式。(命名空间和localpart是相同的!!!)我不想公开WSDL。 例如。 userA向以下URL发送以下SOAP消息:http://soap

  • 尝试使用camel cxf bean调用外部soap服务,但不确定如何在setHeader中传递多个名称空间。 OPERATION_NAMESPACE,常量("http://test.org/Imports") 对于其中一个操作,需要传递2个命名空间作为http://test.org/Importshttp://globe.org/schema 让我知道我们如何在调用cxf bean之前将骆驼头中

  • 我使用的是WSO2 ESB 4.8.1,我希望使用XSLT修改soap消息。 我的soap消息: XSLT: 我在WSO2 ESB中创建了一个xslt文件作为本地条目。但是它添加了一个默认名称空间xmlns=“http://ws.apache.org/ns/synapse”,并将xslt改为: 因此,我的soap messsage结果是: 如何在WSO2 ESB中使用XSLT修改此元素名称而不添加

  • 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码