【问题标题】:spring security custom sessionmanagementfilter same order value errorspring security 自定义 sessionmanagementfilter 相同订单值报错
【发布时间】:2012-02-02 19:38:04
【问题描述】:

我正在尝试自定义 Spring Security 的会话管理过滤器,但我收到错误消息,指出我的过滤器和默认过滤器具有相同的“订单”值(尽管我没有任何 <session-managent> <http> 配置,我有 autoconfig=false,正如 Spring Security 在其文档中所说)。

这是我对 Spring Security 的配置:

<http auto-config="false" use-expressions="true">

    <custom-filter position="SESSION_MANAGEMENT_FILTER" ref="filtroGestionSesion" />

    <intercept-url pattern="/resources/**" filters="none"/>
    <intercept-url pattern="/faces/javax.faces.resource/**" filters="none"/>
    <intercept-url pattern="/faces/inicio.xhtml" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/autenticacion/login.xhtml*" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/administracion/**" access="isAuthenticated()"/>
    <intercept-url pattern="/faces/paginas/barco/**" access="isAuthenticated()"/>
    <intercept-url pattern="/faces/paginas/catalogo/**" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/error/**" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/plantillas/**" access="permitAll"/>
    <intercept-url pattern="/**" access="denyAll" />

    <form-login login-processing-url="/j_spring_security_check"
                login-page="/faces/paginas/autenticacion/login.xhtml"
                default-target-url="/faces/paginas/administracion/inicioAdmon.xhtml"
                always-use-default-target="true"
                authentication-failure-url="/faces/paginas/autenticacion/login.xhtml?error=authentication" />

    <logout logout-url="/j_spring_security_logout"
            logout-success-url="/faces/inicio.xhtml"
            invalidate-session="true" />
</http>

<global-method-security pre-post-annotations="enabled" />

<authentication-manager>
    <authentication-provider>
      <user-service>
        <user name="myuser" password="myuser" authorities="" />
      </user-service>
    </authentication-provider>
</authentication-manager>

<beans:bean id="filtroGestionSesion" class="springSecurity.FiltroGestionSesion">
    <beans:constructor-arg ref="securityContextRepository" />
    <beans:property name="invalidSessionUrl" value="/faces/paginas/autenticacion/login.xhtml?error=timeout" />
</beans:bean>

<beans:bean id="securityContextRepository" class="org.springframework.security.web.context.HttpSessionSecurityContextRepository" />

带有我的自定义过滤器 (springSecurity.FiltroGestionSesion) 的类是来自 Spring Security (org.springframework.security.web.session.SessionManagementFilter) 的类的复制粘贴,但更改了包名、类名和一些自定义我添加到 doFilter 方法的代码。

为什么它不起作用并抛出错误说两个过滤器具有相同的顺序?

我已经通过从&lt;http&gt; 中删除相应的子元素&lt;session-mangement&gt; 来禁用默认过滤器,这样我的过滤器的位置就不会与默认过滤器冲突。

我是否必须删除任何其他元素或自定义其他任何内容?

任何人都知道如何在 SESSION_MANAGEMENT_FILTER 禁用默认过滤器的位置执行自定义过滤器?

提前谢谢你。

【问题讨论】:

    标签: security spring session filter


    【解决方案1】:

    我终于找到了解决方案。如果有人有趣,我会放在这里。

    禁用默认会话管理过滤器的方法不是从&lt;http&gt; 中删除&lt;session-mangement&gt; 元素,而是在没有会话固定保护的情况下添加它:

    <session-management session-fixation-protection="none" />
    

    这样,默认会话管理过滤器不会触发,您可以在该位置添加自定义过滤器,而不会在过滤器链中发生冲突。

    我在我的 webapp 中查看了 Spring Security 的调试日志。

    希望对某人有所帮助。

    【讨论】:

    • @Alex78191 抱歉已经很久了。我发现,为了禁用过滤器,您必须放置 。我不知道在较新的版本中您是否可以通过其他方式做到这一点。
    猜你喜欢
    • 2012-09-05
    • 2010-12-15
    • 2017-04-07
    • 2023-03-19
    • 2015-03-21
    • 2016-09-04
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多