Java Spring安全性/过期url无重定向url

Java Spring安全性/过期url无重定向url,java,web,concurrency,spring-security,Java,Web,Concurrency,Spring Security,您好,我正在使用Spring,我在尝试使用并发控制和身份验证失败url时遇到了一个问题 我试图做到同一用户不能同时登录应用程序。因此,我在security.xml中将并发控制定义为: <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login_page?login_timeout=1"/> 我的想法是,当第二个用户尝试登录时,应使用以下命令调用登录页面: 登录页

您好,我正在使用Spring,我在尝试使用并发控制和身份验证失败url时遇到了一个问题

我试图做到同一用户不能同时登录应用程序。因此,我在security.xml中将并发控制定义为:

<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login_page?login_timeout=1"/>
我的想法是,当第二个用户尝试登录时,应使用以下命令调用登录页面:

登录页面?登录最大会话超过=1 我也有一个表单登录名:

<form-login login-page="/login_page" default-target-url="/index.jsp"
        authentication-failure-url="/login_page?login_error=1" />
但我遇到的问题是,当我尝试登录第二个用户时,总是使用

登录页面?登录错误=1过期的url不重定向 有什么问题?当第二个用户尝试连接时,如何使用过期的url重定向

我使用的spring版本是:

Spring.core 3.2.8和Spring.security 3.2.3

My web.xml

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Sistema de Despacho de Contingencia Acindar</display-name>

<servlet>
    <servlet-name>sdca-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>sdca-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> 

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>

</listener>

<!-- Spring Security -->

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/sdca-security.xml
    </param-value>
</context-param>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<session-config>
    <session-timeout>1</session-timeout>
</session-config>
My security.xml

    <http auto-config="true">
    <form-login login-page="/login_page" default-target-url="/index.jsp"
        authentication-failure-url="/login_page?login_error=1" />
    <logout logout-success-url="/login_page?logout=1" invalidate-session="true" delete-cookies="JSESSIONID" />
        <session-management invalid-session-url="/login_page"
        session-authentication-error-url="/login_page?login_max_session_exceed=1">
        <concurrency-control max-sessions="1"
            error-if-maximum-exceeded="true" expired-url="/login_page?login_timeout=1"/>
    </session-management>
    <intercept-url pattern="/login_page" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/**" access="ROLE_ADMIN" />
</http>

谢谢你的帮助

这里的一些配置选项似乎有点混乱。首先,过期url属性不相关,因为您将多次登录视为错误。它仅适用于允许第二次登录,这将导致第一次登录过期。查看文档以了解更多信息

会话身份验证错误url属性在此处也不适用。引自:

第二次登录将被拒绝。通过“拒绝”,我们的意思是,如果使用基于表单的登录,用户将被发送到身份验证失败url。如果通过另一非交互机制(例如“记住我”)进行第二认证,则将向客户端发送“未经授权”402错误。如果您想使用错误页面,可以将属性会话身份验证错误url添加到会话管理元素中


因此,只有在使用“记住我”身份验证之类的功能时才使用此功能。

谢谢您的回复。但如果定义了身份验证失败url,则会话身份验证错误url不起作用。那么我该如何处理/login\u页面?login\u max\u session\u except=1工作?是否可行?您可以使用自定义AuthenticationFailureHandler控制用户重定向的位置,具体取决于失败是由于并发登录导致的,而您将获得SessionAuthenticationException或其他原因。然而,你也应该弄清楚你实际上想做什么。