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.