«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.