DEV Community

Wellington Domiciano
Wellington Domiciano

Posted on • Originally published at wldomiciano.com

Métodos obsoletos da HttpSecurity no Spring Security 6.1

No Spring Security 6.1 vários métodos da classe HttpSecurity tornaram-se obsoletos e isto afeta projetos criados com Spring Boot a partir da versão 3.1.

Métodos como cors(), csrf(), authorizeHttpRequests(), etc... não devem mais ser usados, pois a expectativa é de que sejam removidos no Spring Security 7.

O que devemos usar atualmente é a versão destes métodos que aceita um Customizer como argumento, o que a documentação chama de Lambda DSL.

Então, o que antes seria configurado assim:

http
  .authorizeHttpRequests()
    .requestMatchers("/blog/**").permitAll()
    .anyRequest().authenticated()
    .and()
  .cors()
    .and()
  .csrf()
    .disable()
Enter fullscreen mode Exit fullscreen mode

Hoje deve ser feito assim:

import static org.springframework.security.config.Customizer.withDefaults;
// ...
http
  .authorizeHttpRequests(
    customizer -> customizer
      .requestMatchers("/blog/**").permitAll()
      .anyRequest().authenticated()
  )
  .cors(withDefaults())
  .csrf(customizer -> customizer.disable())
Enter fullscreen mode Exit fullscreen mode

Este não é um jeito novo, pois está presente desde o Spring Security 5.2, que saiu em 2019. Apenas o que era opcional, hoje é recomendado e logo será requerido e uma das justificativas é de que o estilo de configuração antigo é bastante confuso.

O uso do método estático withDefaults() indica que estamos ativando aquela funcionalidade com suas configurações padrão, mas ele é opcional.

Você poderia usá-lo sem a importação estática.

import org.springframework.security.config.Customizer;
// ...
http
  // ...
  .formLogin(Customizer.withDefaults())
  // ...
Enter fullscreen mode Exit fullscreen mode

Ou apenas usando uma expressão lambda com o corpo vazio.

http
  // ...
  .httpBasic(customizer -> {})
  // ...
Enter fullscreen mode Exit fullscreen mode

E para desabilitar uma funcionalidade é possível usar method references, que eu, particularmente, acho mais elegante.

import org.springframework.security.config.annotation.web.configurers.CsrfConfigurer;
// ..
http
  // ...
  .csrf(CsrfConfigurer::disable)
  // ...
Enter fullscreen mode Exit fullscreen mode

Para mais informações, visite esta página da documentação oficial:

https://docs.spring.io/spring-security/reference/migration-7/configuration.html

Embora eu tenha focado nos métodos da HttpSecurity, outras coisas se tornaram obsoletas nesta versão e a lista completa esta na página abaixo.

https://docs.spring.io/spring-security/site/docs/6.1.2/api/deprecated-list.html#method


Vale destacar que para configurar o HttpSecurity não é necessário encadear os métodos como nos exemplos acima. O mesmo resultado pode ser alcançado da seguinte forma:

http
  .authorizeHttpRequests(
    customizer -> {
      customizer.requestMatchers("/blog/**").permitAll();

      customizer.anyRequest().authenticated();
    }
  );

http.cors(withDefaults());

http.csrf(customizer -> customizer.disable());

// ...

return http.build();
Enter fullscreen mode Exit fullscreen mode

Assim, se você estiver com problemas para entender a Lambda DSL, fazer invocações separadas como acima pode lhe ajudar a entendê-la melhor.

Top comments (0)