2015-03-06 2 views
19

Ich benutze Spring Boot mit Thymeleaf und Spring Security. Ich habe eine einfache Ansicht mit einem Login-Link. Wenn sich der Benutzer anmeldet, möchte ich den Login-Link zum Logout-Link ändern.Thymoleaf mit Spring Security - Wie überprüft man, ob der Benutzer eingeloggt ist oder nicht?

Ich habe versucht:

<div sec:authorize="#{isAuthenticated()}"> 
    <a th:href="@{/logout}">Log out</a> 
</div> 
<div sec:authorize="#{isAnonymous()}"> 
    <a th:href="@{/login}">Log in</a> 
</div> 

aber es funktioniert nicht - es beiden Links angezeigt werden.

Mit freundlichen Grüßen.

EDIT: I gelöst es. Ich musste Thymeleaf Dialekt registrieren. Um dies zu tun, habe ich eine neue Config-Klasse, die SpringSecurityDialect Bean schafft:

@Configuration 
public class ThymeleafConfig { 

    @Bean 
    public SpringSecurityDialect springSecurityDialect(){ 
     return new SpringSecurityDialect(); 
    } 
} 
+1

Ich hatte genau das gleiche Problem - danke. Es sollte nicht so schwierig sein, das zum Laufen zu bringen. –

+0

Die Methode 'SpringSecurityDialect' ist nur in Version '2.1.0.RELEASE' verfügbar? Ich kann nicht die neueste Version verwenden => 2.1.2.RELEASE ... –

Antwort

23

Nach thymeleaf docs kein Spel Ausdruck ist nicht erforderlich. Dies ist kein th: -Attribut.

Sie können also versuchen:

<div sec:authorize="isAuthenticated()"> 

<div sec:authorize="isAnonymous()"> 
+1

Vielen Dank für die Antwort :). – tomdavies

0

auch sec:authorize="isFullyAuthenticated()" verwenden können, die ein anonymousUser und rememberMe wenn seine überprüft.

 <div class="button-group" sec:authorize="!isFullyAuthenticated()"> 
      <a href="/login">Login</a> 
      <a href="/register">Register</a> 
     </div> 
     <div class="button-group" sec:authorize="isFullyAuthenticated()"> 
      <a href="/logout">Logout</a> 
     </div>