Página de logon personalizada para usuários recorrentes
1. Introdução
Este artigo é uma continuação de nossoregistration with Spring Security series em andamento.
In this article, we are going to have a look at how to develop a custom login page for a user who is returning to our application. O usuário será saudado com uma mensagem padrão de “Bem-vindo…”.
2. Adicionando um Cookie de Longa Vida
One way to identify if the user is returning to our website is to add a long-lived cookie (e.g. 30 days) after the user has successfully logged in. Para desenvolver essa lógica, precisamos implementar nossoAuthenticationSuccessHandler, que adiciona o cookie após a autenticação bem-sucedida.
Vamos criar nossoMyCustomLoginAuthenticationSuccessHandler personalizado e implementar o métodoonAuthenticationSuccess():
@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());
}
O foco aqui é a chamada ao métodoaddWelcomeCookie().
Agora, vamos dar uma olhada no código para adicionar o 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;
}
Definimos um cookie com a chave“welcome”e um valor que é ofirstName do usuário atual. O cookie está definido para expirar após 30 dias.
3. Lendo o cookie no formulário de login
A etapa final é ler o cookie sempre que o formulário de login for carregado e, se houver, obter o valor para exibir a mensagem de saudação. Podemos fazer isso facilmente comJavascript.
Primeiro, vamos adicionar o marcador“welcometext” para exibir nossa mensagem na página de login:
Agora, vamos dar uma olhada noJavascript correspondente:
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 + "!";
}
}
A primeira função simplesmente lê o cookie que foi definido enquanto o usuário estava conectado. A segunda função manipula o documento HTML para definir a mensagem de boas-vindas se o cookie estiver presente.
A funçãodisplay_username() é chamada no eventoonload da tagHTML <body>:
4. Conclusão
Neste artigo rápido, vimos como é simples personalizar a experiência do usuário modificando o fluxo de autenticação padrão no Spring. Muitas coisas complexas podem ser feitas com base nessa configuração simples.
A página de login para este exemplo pode ser acessada via URL/customLogin. O código completo para este artigo pode ser encontradoover on GitHub.