2012-10-29 13 views
22

Sono nuovo alla primavera:Spring Security - Reindirizzamento se già connesso

Non voglio che l'utente autenticato acceda alla pagina di accesso. Qual è il modo corretto di gestire i reindirizzamenti per "/ login" se l'utente è già autenticato? Dire, voglio reindirizzare a '/ index' se già effettuato il login.

Ho provato 'isAnonomous()' all'accesso, ma reindirizza per accedere alla pagina negata.

<security:http auto-config="true" use-expressions="true" ...> 
    <form-login login-processing-url="/resources/j_spring_security_check" 
       default-target-url="/index" 
       login-page="/login" authentication-failure-url="/login?login_error=t" /> 
    <logout logout-url="/resources/j_spring_security_logout" /> 
    ... 
    <security:intercept-url pattern="/login" access="permitAll" /> 
    <security:intercept-url pattern="/**" access="isAuthenticated()" /> 
</security:http> 
+0

possibile duplicato di [Come reindirizzare alla homepage se l'utente accede alla pagina di accesso dopo aver effettuato l'accesso?] (Http://stackoverflow.com/questions/12597519/how-to-redirect-to-the-homepage -se-l'-utente-accessi-the-login-pagina-dopo-essere) – Xaerxess

+0

http://stackoverflow.com/questions/32225414/spring-security-login-issue-after-re-login-in-same- sessione/32325358 # 32325358 Questo problema è risolto su questo link. Si prega di dare un'occhiata – parshant

risposta

35

Nella funzione di controllo della vostra pagina di login:

  1. controllare se un utente è connesso

  2. poi lo inoltrare alla pagina indice in questo caso..

codice rilevante:

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

if (!(auth instanceof AnonymousAuthenticationToken)) { 

    /* The user is logged in :) */ 
    return new ModelAndView("forward:/index"); 
} 
+4

Che funzionerà solo per i casi come login -> casa. Che dire se ho già effettuato l'accesso e digito l'url di accesso nella barra degli indirizzi? Avrebbe senso essere reindirizzato alla home page (o ovunque io sia già) di nuovo ... –

+0

Ha funzionato per me. Grazie – zameer

0

hey si può farlo.

<h:head> 
<sec:authorize access="isAuthenticated()"> 
    <meta http-equiv="refresh" content="0;url=http://your index.xhtml url (full url)" /> 
</sec:authorize> 
</h:head> 

Questo metodo è molto semplice e conveniente, non è vero?

1

login.xhtml

<h:head > 
    <f:metadata> 
     <f:event type="preRenderView" listener="#{loginBean.onPageLoad}"/> 
    </f:metadata> 
</h:head> 

loginBean

public void onPageLoad(){ 
    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    if (!(auth instanceof AnonymousAuthenticationToken)) { 
     try { 
      FacesContext.getCurrentInstance().getExternalContext().redirect(url); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
5

Per reindirizzare con successo dalla pagina di login, se l'utente è già registrato, aggiungere il seguente al vostro login.jsp:

Add un'intestazione tagliente di sicurezza nella parte superiore del tuo jsp:

<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%> 

quindi aggiungere il seguente tag all'interno del tag "testa" (preferibilmente nella parte superiore):

<sec:authorize access="isAuthenticated()"> 
    <% response.sendRedirect("main"); %> 
</sec:authorize> 

Questo reindirizzerà alla main.html (o qualunque sia il vostro .jsp principale è mappato a) se l'utente che accede la pagina di accesso è già stata registrata.

Fare questo tramite un controller non ha funzionato per me, dal momento che la pratica della pagina di accesso valida è di lasciare che il bean "form-login" della spring spring esegua tutto il lavoro di reindirizzamento, quindi non c'era alcun controller di login da modificare .

Problemi correlati