Как скрыть ссылку входа в систему и показать ссылку выхода из системы на панели навигации домашней страницы, когда пользователь входит в систему и перенаправляется на домашнюю страницу? - PullRequest
0 голосов
/ 13 июня 2019

Я работаю над веб-приложением, основанным на загрузке Spring, и домашняя страница содержит навигационную панель boostrap со ссылкой «Войти» и «Зарегистрироваться».

Как только пользователь войдет в систему (нажав на ссылку для входа на домашней странице), он будет снова перенаправлен на домашнюю страницу (если только он не посетит любую другую ссылку до того, как весенняя система безопасности активирует A & A). При перенаправлении я хочу скрыть вход в систему и зарегистрировать ссылки с панели навигации и показать ссылку выхода из системы на их месте. Поскольку я хочу вставить панель навигации на всех страницах приложения.

Я хочу знать, каков наилучший / стандартный способ сделать это, если требование перенаправить на ту же страницу.

Одним из решений, которое я могу придумать, является проверка и получение объекта-принципала пользователя из Spring Security, передача его в шаблон thymeleaf и проверка того, что если userprincipal-объект присутствует в атрибуте запроса к шаблону thymeleaf, это означает, что пользователь вошел в систему, и я могу затем скрыть (не рендерить) ссылки входа и регистрации и показать (рендерить) ссылку выхода из системы. Если нет, показать логин и зарегистрировать ссылки и скрыть ссылку выхода. Мне интересно, это правильный способ сделать это? Мне это кажется хаком, и поэтому я хочу знать, есть ли какой-нибудь стандартный способ сделать это.

1 Ответ

2 голосов
/ 13 июня 2019

Существует расширение Thymeleaf Spring Security, которое вы можете использовать:

    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    </dependency>

Добавить пространство имен

<html xmlns:th="http://www.thymeleaf.org" 
      xmlns:sec="http://www.thymeleaf.org/extras/spring-security">

И тогда вы можете использовать его:

        <li sec:authorize="!isAuthenticated()" class="nav-item">
            <a class="btn btn-outline-light" th:href="@{/login}">Login</a>
        </li>
        <li sec:authorize="isAuthenticated()" class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown"
               aria-haspopup="true" aria-expanded="false" sec:authentication="name">
            </a>
            <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                <a class="pl-3" th:href="@{/password}">Passwort ändern</a>
                <div class="dropdown-divider"></div>
                <a class="pl-3" th:href="@{/logout}">Logout</a>
            </div>
        </li>

Пожалуйста, найдите всю документацию здесь:

https://github.com/thymeleaf/thymeleaf-extras-springsecurity

...