Na página do "Getting Started" do "Securing a Web Application" ([https://spring.io/guides/gs/securing-web/]), utilizando a versão 2.7.3 do Spring Boot, é sugerido o seguinte código (que inclusive eu fiz as alterações necessárias para adaptar à minha aplicação):
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(request -> {
try {
request.anyRequest().authenticated();
} catch (Exception e) {
e.printStackTrace();
}
})
.formLogin(form -> form.loginPage("/login").permitAll().defaultSuccessUrl("/home", true))
.logout(logout -> logout.permitAll());
return http.build();
}
}
A minha dúvida começa da seguinte maneira: Como a classe "WebSecurityConfig" da aula herda da classe "WebSecurityConfigurerAdapter" (que foi descontinuada), o método "configure" foi sobrescrito para realizar as funções do método exemplo acima. Assim, nesta aula, o método "configure" recebe como parâmetro o "AuthenticationManagerBuilder", e através dele o professor indica para o Spring Security que vai trabalhar com o JDBC Authentication.
Porém, no meu caso, como eu não fiz uso da herança da classe "WebSecurityConfigurerAdapter", eu segui o próprio guide do JDBC Authentication através do JdbcUserDetailsManager Bean, e ficou da seguinte maneira:
@Bean
public UserDetailsManager users(DataSource dataSource) {
JdbcUserDetailsManager users = new JdbcUserDetailsManager(dataSource);
return users;
}
Porém, o detalhe é: Dessa maneira, eu não precisei fazer a injeção de dependência do DataSource utilizando a annotation @Autowired. Ele simplesmente aceitou a conexão do meu banco de dados que eu configurei apenas no application.properties. Por que isso aconteceu?