Segurança de primavera com Thymeleaf

Segurança de primavera com Thymeleaf

1. Visão geral

In this quick tutorial, we’ll focus on Spring Security with Thymeleaf. Vamos criar um aplicativo Spring Boot onde demonstraremos o uso do dialeto de segurança.

Nossa escolha para a tecnologia de front-end éThymeleaf - um moderno mecanismo de modelagem da Web do lado do servidor, com boa integração com o framework Spring MVC. Para obter mais detalhes, consulte nossointro article nele.

Por fim, o Spring Security Dialect é um módulo extra do Thymeleaf que, naturalmente, ajuda a integrar os dois juntos.

Estaremos usando o projeto simples que construímos em nosso artigoSpring Boot tutorial; também temos umThymeleaf tutorial with Spring, onde a configuração padrão do Thymeleaf pode ser encontrada.

2. Dependências

Em primeiro lugar, vamos adicionar a nova dependência ao nosso Mavenpom.xml:


    org.thymeleaf.extras
    thymeleaf-extras-springsecurity4

É recomendado sempre usar a versão mais recente - que podemos superar emMaven Central.

3. Configuração de segurança da primavera

A seguir, vamos definir a configuração do Spring Security.

Também precisamos de pelo menos dois usuários diferentes para demonstrar o uso do dialeto de segurança:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    // [...]
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
      throws Exception {
        auth
          .inMemoryAuthentication()
          .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
          .and()
          .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Como podemos ver, emconfigureGlobal(AuthenticationManagerBuilder auth) definimos dois usuários com nome de usuário e senha. Podemos usá-los para acessar nosso aplicativo.

Nossos usuários têm funções diferentes:ADMIN eUSER, respectivamente, para que possamos apresentar a eles conteúdo específico com base em uma função.

4. Dialeto de Segurança

The Spring Security dialect allows us to conditionally display content based on user roles, permissions or other security expressions. Também nos dá acesso ao objeto SpringAuthentication.

Vejamos a página de índice, que contém exemplos de dialeto de segurança:



    
        Welcome to Spring Security Thymeleaf tutorial
    
    
        

Welcome

Spring Security Thymeleaf tutorial

Text visible to user.
Text visible to admin.
Text visible only to authenticated users.
Authenticated username:
Authenticated user roles:

Podemos ver os atributos específicos do dialeto Spring Security:sec:authorizeesec:authentication.

Vamos discutir isso, um por um.

4.1. Compreendendosec:authorize

Simplificando, usamos o atributosec:authorize para controlar o conteúdo exibido.

Por exemplo, se quisermos mostrar conteúdo apenas para um usuário com a função USUÁRIO - podemos fazer:<div sec:authorize=”hasRole(‘USER')”>.

E, se queremos ampliar o acesso a todos os usuários autenticados, podemos usar a seguinte expressão:

.

4.2. Compreendendosec:authentication

A interface Spring SecurityAuthentication expõe métodos úteis relacionados ao principal autenticado ou à solicitação de autenticação.

Paraaccess an authentication object withing Thymeleaf, podemos simplesmente usar<div sec:authentication=”name”> ou<div sec:authentication=”principal.authorities”>.

O primeiro nos dá acesso ao nome do usuário autenticado, o último nos permite acessar as funções do usuário autenticado.

5. Sumário

Neste artigo, usamos o suporte ao Spring Security no Thymeleaf, em um aplicativo simples do Spring Boot.

Como sempre, uma versão funcional do código mostrado neste artigo está disponível em nossoGitHub repository.