security - spring security自定义sessionmanagementfilter相同订单值错误

标签 security spring session filter

我正在尝试自定义 Spring Security 的 session 管理过滤器,但收到错误消息,指出我的过滤器和默认过滤器具有相同的“顺序”值(尽管我的过滤器中没有任何 <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 方法中的代码。

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

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

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

有人知道如何在 SESSION_MANAGEMENT_FILTER 的位置上使用自定义过滤器来禁用默认过滤器吗?

提前谢谢您。

最佳答案

终于找到解决办法了。如果有人感兴趣,我就把它放在这里。

禁用默认 session 管理过滤器的方法不是删除 <session-mangement>来自 <http> 的元素,但添加它时没有 session 固定保护:

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

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

我已经检查了我的 web 应用程序中 spring security 的调试日志。

希望它对某人有帮助。

关于security - spring security自定义sessionmanagementfilter相同订单值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9118793/

相关文章:

security - 如何在 .NET 中使用成员身份重命名角色?

java - 我们什么时候在 spring security 中使用 denyAll

java - Webflux Webclient 使用不同的 URL 重试

asp.net - 大量具有相同 session ID 的 Session_Start

c# - 连接到 Azure 云 Blob 存储失败,证书无效

java - 为什么范围原型(prototype)不适用于实现 BeanPostProcessor 的 spring bean

java - RepositoryItemReader 找不到带参数的方法

django - 我应该为我的电子商务网站使用 JWT 还是 session ?

java - 如何在 Android 上恢复 SSL session

sql-server-2008 - SQL Server 行级安全性 - 多对多