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()
.
Теперь давайте посмотрим на код для добавления файла 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 дней.
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- тега <body>
: ``
<body onload="display_username()">
4. Вывод
В этой быстрой статье мы увидели, как просто настроить взаимодействие с пользователем, изменив поток аутентификации по умолчанию в Spring. На основе этой простой настройки можно сделать много сложных вещей.
Доступ к странице входа в этом примере можно получить через URL-адрес /customLogin
. Полный код для этой статьи можно найти на GitHub .