Перейти к основному содержимому

Пользовательская страница входа для вернувшегося пользователя

· 3 мин. чтения

1. Введение

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

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

Одним из способов определить, возвращается ли пользователь на наш веб-сайт, является добавление долгоживущего файла 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() .

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

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;
}

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

Последним шагом является чтение файла 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- тега <body> : ``

<body onload="display_username()">

4. Вывод

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

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