spring security custom sessionmanagementfilter相同的订单值错误

cho*_*o70 3 security session spring filter

我正在尝试自定义Spring Security的会话管理过滤器,但是我得到的错误是我的过滤器和默认过滤器具有相同的'order'值(虽然<session-managent>我的<http>配置中没有任何内容,但我有autoconfig =是的,正如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" />
Run Code Online (Sandbox Code Playgroud)

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

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

我已经通过删除相应的子元素<session-mangement>来禁用默认过滤器<http>,以便我的过滤器的位置不会与默认过滤器冲突.

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

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

先感谢您.

cho*_*o70 9

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

禁用默认会话管理过滤器的方法不是<session-mangement>从中删除元素<http>,而是添加没有会话固定保护:

<session-management session-fixation-protection="none" />
Run Code Online (Sandbox Code Playgroud)

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

我查看了它在我的webapp中查看spring security的调试日志.

希望它可以帮助某人.