2013-07-25 14 views
5

Ho implementato la sicurezza di primavera per l'accesso al mio portale web. Funziona bene tranne per un problema. Ho impostato il timeout della sessione a 5 minuti. Una volta scaduto il timeout e poi l'utente fa clic su qualsiasi URL, viene reindirizzato alla pagina di disconnessione. Ma quando l'utente si autorizza, l'utente atterra direttamente sull'ultima pagina di accesso invece della home page che è l'URL di destinazione predefinito.la sicurezza di primavera reindirizza all'ultima pagina richiesta dopo il timeout della sessione di login

file di protezione La primavera è come di seguito:

<?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> 

risposta

8

Aggiungere il sempre-use-default-bersaglio attributo per il tuo form-login tag.

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

Se impostata su true, l'utente avrà sempre inizio alle il valore dato dal default-bersaglio-url, indipendentemente da come sono arrivati ​​alla pagina di login. Esegue il mapping alla proprietà alwaysUseDefaultTargetUrl di UsernamePasswordAuthenticationFilter. Il valore predefinito è falso.

+0

Grazie Bart. Funziona come previsto – UserAdi

2

In Grails, questa impostazione risolve il problema in Config.groovy

grails.plugin.springsecurity.successHandler.alwaysUseDefault = true 
Problemi correlati