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.