2013-07-25 10 views
5

Ich habe Spring-Sicherheit für die Anmeldung in meinem Web-Portal implementiert. Es funktioniert gut, bis auf ein Problem. Ich habe Session Timeout auf 5 Minuten eingestellt. Sobald die Zeitüberschreitung eintritt und der Benutzer auf eine beliebige URL klickt, wird er auf die Abmeldeseite umgeleitet. Wenn der Benutzer jedoch erneut authentifiziert, landet der Benutzer direkt auf der letzten Zugriffsseite anstelle der Startseite, die die Standardziel-URL ist.Spring Security leitet auf die zuletzt angeforderte Seite nach dem Timeout der Login-Sitzung um

Frühling Sicherheitsdatei ist wie folgt:

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 

     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

    <http auto-config="true"> 
     <intercept-url pattern="/index.jsp" access="ROLE_ADMIN,ROLE_USER" /> 
     <intercept-url pattern="/home.html" access="ROLE_ADMIN,ROLE_USER" /> 
     <intercept-url pattern="/mdm/accessToken.html" access="ROLE_USER" /> 
     <intercept-url pattern="/mdm/enroll.html" access="ROLE_USER" /> 
     <intercept-url pattern="/mdm/installApp.html" access="ROLE_USER" /> 
     <intercept-url pattern="/mdm/checkStatus.html" access="ROLE_USER" /> 
     <intercept-url pattern="/mdm/searchDevice.html" access="ROLE_USER" />  
     <intercept-url pattern="/admin/*" access="ROLE_ADMIN" /> 
     <intercept-url pattern="/account/*" access="ROLE_ADMIN" /> 
     <intercept-url pattern="/user/*" access="ROLE_USER" />  

     <form-login login-page="/login.html" default-target-url="/home.html" 
        authentication-failure-url="/loginfailed.html" /> 
     <logout logout-url="/logout.html" logout-success-url="/logoutSuccess.html" invalidate-session="true" /> 
     <anonymous username="guest" granted-authority="ROLE_GUEST" /> 
     <session-management> 
      <concurrency-control max-sessions="1" /> 
     </session-management> 
     <session-management invalid-session-url="/logout.html" /> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <jdbc-user-service data-source-ref="dataSource" 
       users-by-username-query="select USER as username, password, 'true' as enabled from TBL_USER_MASTER where user=?" 
       authorities-by-username-query="select um.USER as username , rm.ROLE_NAME as authorities from TBL_USER_MASTER um,TBL_ROLE_MASTER rm 
      where um.USER=? and um.role_id=rm.role_id" /> 
      <password-encoder hash="md5"/> 
     </authentication-provider> 
    </authentication-manager> 
</beans:beans> 

Antwort

8

Fügen Sie das immer gebrauchs-default-Ziel Attribute auf Ihren Form-login-Tag.

<form-login always-use-default-target="true" /> 

Wenn auf true gesetzt, wird der Benutzer immer auf dem Wert von default-Ziel-URL angegeben beginnen, unabhängig davon, wie sie auf der Login-Seite angekommen. Wird der Eigenschaft alwaysUseDefaultTargetUrl von UsernamePasswordAuthenticationFilter zugeordnet. Der Standardwert ist false.

+0

Dank Bart. Es funktioniert wie erwartet – UserAdi

2

In Grails, löst diese Einstellung das Problem in Config.groovy

grails.plugin.springsecurity.successHandler.alwaysUseDefault = true 
Verwandte Themen