WebSecurityConfigurerAdapter is Deprecated
Spring Boot 2.7 WebSecurityConfigurerAdapter is Deprecated
Ao tentar configurar o Spring Security na sua aplicação Spring Boot você está recebendo do compilador de sua IDE a mensagem WebSecurityConfigurerAdapter is Deprecated?
Se sim, o problema não é com Spring Boot, mas o resultado de uma atualização recente que ocorreu no Spring Security. O Spring Security versão 5.7.0 (e superiores) recebeu tal atualização e por conta disso, os projetos Spring Boot com versões superiores a 2.7.0 terão essa atualização refletida por fazerem uso das novas versões do Spring Security.
Spring Security com WebSecurityConfigurerAdapter
As versões anteriores a 5.7.0 do Spring Security dependiam que uma configuração semelhante ao código abaixo fosse realizada:
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// configuração ...
}
@Override
public void configure(WebSecurity web) throws Exception {
// configuração ...
}
}
Basicamente, ao estender a classe WebSecurityConfigurerAdapter, nós sobrescrevemos os métodos configure()
para adicionar as regras de segurança em nossas aplicações. Entretanto, os desenvolvedores, do projeto Spring Security, resolveram incentivar a configuração de segurança com base em componentes e não mais em herança..
Spring Security sem WebSecurityConfigurerAdapter
A atualização realizada reflete em uma nova forma de manipular os métodos com as regras de seguranças. Em vez de você estender a classe WebSecurityConfigurerAdapter e fazer uso dos métodos configure()
, agora você deve declarar beans do Spring do tipo SecurityFilterChain e/ou WebSecurityCustomizer da seguinte maneira:
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// configuração ...
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
// configuração ...
}
}
Observando os métodos com atenção e comparando-os com as versões anteriores, podemos ver que os métodos configure()
eram do tipo void
, e agora com a criação de beans, os novos métodos passam a ter retornos do tipo SecurityFilterChain
e WebSecurityCustomizer
.
Então, como lidar com esses retornos? Veremos a seguir em um exemplo bastante simples de uma configuração para uma operação do tipo REST:
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csrf().disable()
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/blog/**").hasRole("USER")
.anyRequest().authenticated()
.and().httpBasic()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().build();
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring()
.antMatchers("/images/**", "/js/**", "/webjars/**");
}
}
O objeto HttpSecurity
, de filterChain()
, possui o método build()
que retorna um objeto SecurityFilterChain
para finalizar a operação de retorno.
Porém, caso queira usar o método webSecurityCustomizer()
, como ele não possui um argumento, usamos uma expressão lambda a partir do seu tipo de retorno. Lembrando que, o Spring Security lança mensagens no log de inicialização que desencorajam ao uso do método ignoring()
e informando que deveríamos substituir esse tipo de declaração pelo permitAll()
.
Conforme vimos não tivemos uma mudança tão drástica, mas é importante tomar cuidado ao atualizar sua aplicação Spring Boot ou aquela que use o Spring Security, porque terá que lidar com essas mudanças. Além disso, lembre-se que todos os demais métodos que podiam ser herdados de WebSecurityConfigurerAdapter agora estão em desuso também. Por isso, busque na documentação a melhor forma de substituí-los ou dê uma lida no artigo do blog oficial do Spring.io, segue o link:
Até a próxima!