2015-03-06 18 views
19

Używam Spring Boot z Thymeleaf i Spring Security. Mam prosty widok z linkiem do logowania. Gdy użytkownik się zaloguje, chcę zmienić link logowania na link wylogowania.Thymeleaf z Spring Security - jak sprawdzić, czy użytkownik jest zalogowany, czy nie?

Próbowałem:

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

ale to nie działa - wyświetla zarówno linki.

Pozdrawiamy.

EDYTOWANIE: I rozwiązano go. Musiałem zarejestrować dialekt Thymeleafa. W tym celu, stworzyłem nową klasę config, który tworzy SpringSecurityDialect Fasola:

@Configuration 
public class ThymeleafConfig { 

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

Miałem dokładnie ten sam problem - dziękuję. Nie powinno to być tak trudne, aby to zadziałało. –

+0

Metoda "SpringSecurityDialect" jest dostępna tylko w wersji "2.1.0.RELEASE"? Nie mogę użyć najnowszej wersji => 2.1.2.RELEASE ... –

Odpowiedz

23

Według thymeleaf docs nie jest wymagane wyrażenie Spel. To nie jest atrybut th:.

Więc można spróbować:

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

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

Dziękuję za odpowiedź :). – tomdavies

0

mogą również korzystać sec:authorize="isFullyAuthenticated()" który sprawdza, czy jego anonymousUser i rememberMe.

 <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> 
Powiązane problemy