1
resposta

Como obter o AuthenticationManager no novo Spring Security

Estou implementando os exemplos da aula na versão atual do Spring Security, sem usar o WebSecurityconfigureradapter, que está deprecated (marcado para ser eliminado em versões futuras), mas não estava descobrindo como obter uma instância do AuthenticationManager para passar para o JWTLoginFilter - depois descobri que basta injetar o AuthenticationConfiguration, que tem um getter do AuthenticationManager.

Ficou assim:


@Configuration
@EnableWebSecurity
class SecurityConfiguration(
    private val configuration: AuthenticationConfiguration,
    private val jwtUtil: JWTUtil
) {

    @Bean
    fun filterChain(http: HttpSecurity): SecurityFilterChain {
        http.authorizeHttpRequests()
            .antMatchers("/topicos").hasAuthority("LEITURA_ESCRITA")
            .antMatchers("/login").permitAll()
            .anyRequest().authenticated()

        http.addFilterBefore(JWTLoginFilter(authManager = configuration.authenticationManager, jwtUtil = jwtUtil), UsernamePasswordAuthenticationFilter::class.java)

        http.addFilterBefore(JWTAuthenticationFilter(jwtUtil = jwtUtil), OncePerRequestFilter::class.java)

        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().formLogin().disable().httpBasic()

        return http.build()
    }

    @Bean
    fun encoder(): PasswordEncoder? {
        return BCryptPasswordEncoder()
    }

}

Só descobri isso em uma resposta a uma dúvida sobre como fazer isso no fórum de discussão de um artigo sobre o novo Spring Security: http://disq.us/p/2p10t9l

Bem que isso podia estar mais bem documentado... passei algum tempo procurando na documentação oficial, li o tal artigo, e nada de descobrir como obter o tal AuthenticationManager... até que resolvi ler a discussão do fórum, e vi o comentário acima.

1 resposta

Obrigado pelas dicas, Leonardo. Vou verificar aqui com a equipe para inserirmos algo sobre a atualização do spring security =)