Spring Security / abgelaufen-url keine url-Weiterleitung
Hallo Im arbeiten mit Frühling, und ich habe ein problem, versucht die concurrency-control und authentication-failure-url.
Ich versuche zu tun, dass der gleiche Benutzer können sich nicht anmelden in der Anwendung gleichzeitig. Also für das, dass ich definierte die concurrency-control in security.xml als:
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login_page?login_timeout=1"/>
Meine Idee ist, wenn der zweite Benutzer wird versuchen sich einzuloggen, werden die login-Seite aufgerufen werden soll mit:
- login_page?login_max_session_exceed=1"
Ich habe ein form-login auch als:
<form-login login-page="/login_page" default-target-url="/index.jsp"
authentication-failure-url="/login_page?login_error=1" />
Aber das problem, dass ich habe ist, wenn ich versuche, um sich der zweite Benutzer IMMER die login-Seite wird aufgerufen mit
- login_page?login_error=1" (die abgelaufen-url wird nicht umgeleitet)
Was ist das problem? Wie kann ich tun, um zu verwenden, das abgelaufen ist-url-Umleitung, wenn der zweite Benutzer versucht zu verbinden.
Die version der Quelle, die ich verwenden, sind:
Frühjahr.Kern 3.2.8 und Frühjahr.Sicherheit 3.2.3
Meine 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>
Meine 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>
Danke für dich Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es ein wenig Verwirrung über einige der Konfigurationsoptionen, die hier. So starten Sie mit, die
expired-url
Attribut ist nicht relevant, da Sie die Behandlung mehrere logins ein Fehler. Es gilt nur, wenn Sie es zulassen, dass eine zweite Anmeldung, die dann bewirken, dass die erste zu sein "abgelaufen". Schauen Sie sich die Dokumentation für die namespace-Konfiguration.Den
session-authentication-error-url
Attribut gilt nicht für die hier entweder. Zitat von das Handbuch:Also es wird nur verwendet, wenn etwas wie denken Sie daran-mir-Authentifizierung verwendet wird.
AuthenticationFailureHandler
zu kontrollieren, wo der Benutzer umgeleitet wird, je nachdem, ob Fehler durch eine gleichzeitige login (wenn man einSessionAuthenticationException
) oder irgendeinem anderen Grund. Allerdings sollte man wohl auch klären, was du eigentlich machen willst.