Página de logon personalizada para usuários recorrentes

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…”.

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.

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.