2012-10-29 1 views
22

Ich bin neu in Spring:Spring Security - Redirect wenn bereits angemeldet

Ich möchte nicht authentifizierten Benutzer Zugriff auf die Anmeldeseite. Was ist der richtige Weg, um Weiterleitungen für das '/ login' zu behandeln, wenn der Benutzer bereits authentifiziert ist? Sagen wir, ich möchte auf '/ index' umleiten, wenn ich bereits eingeloggt bin.

Ich habe 'isAnonomous()' beim Login versucht, aber es wird zum Zugriff auf die verweigerte Seite weitergeleitet.

<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

mögliches Duplikat von [Wie wird auf die Startseite umgeleitet, wenn der Benutzer nach dem Anmelden auf die Anmeldeseite zugreift?] (Http://stackoverflow.com/questions/12597519/how-to-redirect-to-the-homepage -if-the-user-greift auf die-Login-Seite-nach-Sein zu) – Xaerxess

+0

http://stackoverflow.com/questions/32225414/spring-security-login-issue-after-re-login-in-same- session/32325358 # 32325358 Dieses Problem ist auf diesem Link gelöst. Bitte schauen Sie sich – parshant

Antwort

35

In der Controller-Funktion Ihrer Login-Seite:

  1. überprüfen, ob ein Benutzer angemeldet ist

  2. ihn in diesem Fall zur Indexseite dann weiterleiten..

Relevante Code:

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

if (!(auth instanceof AnonymousAuthenticationToken)) { 

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

Das funktioniert nur für Fälle wie Login -> Home. Was ist, wenn ich bereits angemeldet bin und die Login-URL in die Adresszeile eintippe? Es würde Sinn machen, wieder auf die Homepage (oder wo auch immer ich bin) umgeleitet zu werden ... –

+0

Es hat für mich funktioniert. Vielen Dank – zameer

0

hey Sie kann das tun.

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

Diese Methode ist sehr einfach und bequem, nicht wahr?

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

Um erfolgreich von Login-Seite zu umleiten, wenn der Benutzer bereits angemeldet ist, folgendes zu Ihrem login.jsp hinzufügen:

hinzufügen eine Sicherheitstaglib-Kopfzeile an die Spitze Ihres JSP:

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

Dann das folgende Tag in Ihrem „Kopf“ Tag (vorzugsweise am oberen Rand) hinzufügen:

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

Diese Main.html wird umleiten (oder was auch immer Ihre Haupt .jsp ist abgebildet), wenn der Benutzer zugreifenden Die Anmeldeseite ist bereits angemeldet.

Dies zu tun, funktionierte nicht für mich, da die gültige Seite der Anmeldeseite ist, die "form-login" Bean der Spring Security die Weiterleitung zu machen, also gab es keinen Login-Controller für mich zu modifizieren .