Configuração de Segurança com Spring Security

Visão Geral do Framework Spring Security

O Spring Security é um frameowrk robusto para projetos baseados em Spring, tornando-se a opção padrão para módulos de segurança no Spring Boot. Ele fornece um controle de segurança avançado para aplicações web. A integração é simplificada pela adição do spring-boot-starter-security, permitindo uma implementação poderosa com configuração mínima.

Os componentes centrais incluem:

  • WebSecurityConfigurerAdapter: Para customização de políticas de segurança.
  • AuthenticationManagerBuilder: Para definir estratégias de autenticação.
  • @EnableWebSecurity: Para habilitar o suporte à segurança web.

Os dois pilares do Spring Security são a "autenticação" (verificação de identidade) e a "autorização" (cnotrole de acesso).

Implementação Prática do Spring Security

1. Adicionando a Dependência

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. Definindo a Classe de Configuração

@EnableWebSecurity
public class AppSegurancaConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/area1/**").hasRole("user")
                .antMatchers("/area2/**").hasRole("manager")
                .antMatchers("/area3/**").hasRole("admin");

        http.formLogin().loginPage("/acesso");
        http.logout().logoutSuccessUrl("/");
        http.rememberMe();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder encoder = new BCryptPasswordEncoder();
        auth.inMemoryAuthentication()
                .passwordEncoder(encoder)
                .withUser("joao")
                    .password(encoder.encode("senha123"))
                    .roles("user", "manager")
                .and()
                .withUser("admin")
                    .password(encoder.encode("admin456"))
                    .roles("user", "manager", "admin")
                .and()
                .withUser("visitante")
                    .password(encoder.encode("visita789"))
                    .roles("user");
    }
}

Integração com a Camada de Apresentação (Thymeleaf)

1. Dependências Necessárias

<!-- Motor de template Thymeleaf -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>

<!-- Integração Thymeleaf + Spring Security -->
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity4</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

2. Controle de Exibição nas Páginas

Utilizando o namespace de segurança do Thymeleaf, é possível renderizar condicionalmente elementos HTML com base nas permissões do usuário autenticado. Isso permite mostrar ou ocultar menus, links e botões conforme os papéis atribuídos.

Nota sobre CSRF: O Spring Security habilita a proteção contra CSRF por padrão. Caso a funcionalidade de logout não opere como esperado, uma possível causa é a requisição de logout não incluir o token CSRF necessário. É possível desativar essa proteção na configuração do HttpSecurity para fins de desenvolvimento.

Tags: Spring Security Spring Boot thymeleaf autenticacao Autorizacao

Publicado em 7-14 23:34