2
respostas

APPLICATION FAILED TO START - securityFilterChain required a bean

Olá! Implementei os conhecimentos passados no curso até a aula "03.Spring Security" e estou com erro ao iniciar minha aplicação. A classe SecurityConfigurations esta igual a passada no curso.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfigurations {
    
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {			
        return http.csrf().disable()         
                   .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                   .and().build();        
    }

     @Bean
     public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
         return configuration.getAuthenticationManager();
     }
            
     @Bean
     public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
     }
     
}

Segue o erro:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method securityFilterChain in com.br.grupolle.api_credenciamento.security.SecurityConfigurations required a bean of type 'org.springframework.security.config.annotation.web.builders.HttpSecurity' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.security.config.annotation.web.builders.HttpSecurity' in your configuration.
2 respostas

E aí

Parece que o Spring Boot está reclamando que não consegue encontrar um bean do tipo HttpSecurity que você está tentando usar como parâmetro para o método securityFilterChain. A solução é simples, basta você adicionar um método que configure o HttpSecurity na sua classe SecurityConfigurations.

Tenta adicionar um método assim:

@Configuration
@EnableWebSecurity
public class SecurityConfigurations {
    
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {            
        return http.csrf().disable()         
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and().build();        
    }

    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
        return configuration.getAuthenticationManager();
    }
            
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Configurações específicas do HttpSecurity vão aqui
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

Este método configure(HttpSecurity http) é onde você pode personalizar as configurações de segurança específicas para a sua aplicação. Lembre-se de ajustar as permissões conforme necessário.

Opa, configurei da forma que orientou. Tive apenas que adicionar o extends WebSecurityConfigurerAdapter na classe : public class SecurityConfigurations extends WebSecurityConfigurerAdapter{

mas o erro foi o mesmo.