«1. Введение

Эта статья является продолжением нашей продолжающейся регистрации в серии Spring Security.

В этой статье мы рассмотрим, как разработать пользовательскую страницу входа для пользователя, который возвращается в наше приложение. Пользователя встретит стандартное приветственное сообщение.

2. Добавление долгоживущего файла cookie

Один из способов определить, возвращается ли пользователь на наш веб-сайт, — это добавить долгоживущий файл cookie (например, 30 дней) после того, как пользователь успешно вошел в систему. Для разработки этой логики , нам нужно реализовать наш AuthenticationSuccessHandler, который добавляет файл cookie после успешной аутентификации.

Давайте создадим наш собственный MyCustomLoginAuthenticationSuccessHandler и реализуем метод onAuthenticationSuccess():

@Override
public void onAuthenticationSuccess(final HttpServletRequest request,
  final HttpServletResponse response, final Authentication authentication)
  throws IOException {
    addWelcomeCookie(gerUserName(authentication), response);
    redirectStrategy.sendRedirect(request, response,
    "/homepage.html?user=" + authentication.getName());
}

Здесь основное внимание уделяется вызову метода addWelcomeCookie().

Теперь давайте посмотрим на код для добавления куки:

private String gerUserName(Authentication authentication) {
    return ((User) authentication.getPrincipal()).getFirstName();
}

private void addWelcomeCookie(String user, HttpServletResponse response) {
    Cookie welcomeCookie = getWelcomeCookie(user);
    response.addCookie(welcomeCookie);
}

private Cookie getWelcomeCookie(String user) {
    Cookie welcomeCookie = new Cookie("welcome", user);
    welcomeCookie.setMaxAge(60 * 60 * 24 * 30);
    return welcomeCookie;
}

Мы установили куки с ключом «welcome» и значением, которое является именем текущего пользователя. Срок действия файла cookie истекает через 30 дней.

3. Чтение файла cookie в форме входа в систему

Последним шагом является чтение файла cookie всякий раз, когда загружается форма входа, и, если он присутствует, получение значения для отображения приветственного сообщения. Мы можем сделать это легко с помощью Javascript.

Во-первых, давайте добавим заполнитель «welcometext» для отображения нашего сообщения на странице входа:

<form name='f' action="login" method='POST' onsubmit="return validate();">
    <span id="welcometext"> </span>
                 
    <br /><br />
    <label class="col-sm-4" th:text="#{label.form.loginEmail}">Email</label>
    <span class="col-sm-8">
      <input class="form-control" type='text' name='username' value=''/>
    </span>
    ...
</form>

Теперь давайте посмотрим на соответствующий Javascript:

function getCookie(name) {
    return document.cookie.split('; ').reduce((r, v) => {
        const parts = v.split('=')
        return parts[0] === name ? decodeURIComponent(parts[1]) : r
    }, '')
}
    
function display_username() {
    var username = getCookie('welcome');
    if (username) {
        document.getElementById("welcometext").innerHTML = "Welcome " + username + "!";
    }
}

Первая функция просто читает файл cookie, который был установлен, когда пользователь вошел в систему. Вторая функция манипулирует документом HTML, чтобы установить приветственное сообщение, если файл cookie присутствует.

Функция display_username() вызывается в событии onload HTML-тега \u003cbody\u003e:

<body onload="display_username()">

4. Заключение

В этой быстрой статье мы увидели, как просто настроить взаимодействие с пользователем с изменение потока аутентификации по умолчанию в Spring. На основе этой простой настройки можно сделать много сложных вещей.

Доступ к странице входа для этого примера можно получить через URL-адрес /customLogin. Полный код для этой статьи можно найти на GitHub.