DEV Community

Wellington Domiciano
Wellington Domiciano

Posted on • Originally published at wldomiciano.com

1

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.

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay