Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Uso do dataSource

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?

1 resposta
solução!

Jean, na verdade você realizou a injeção da dependência utilizando ela como argumento em: users(DataSource datasource). O Spring automaticamente se encarrega de buscar esse BEAN e trazer ela do contexto da aplicação para o método.

Não necessariamente vc precisa declarar as suas dependências como atributos na classe. No caso do vídeo, como o datasource não foi passado como parâmetro no método, ele criou o atributo no corpo da classe para que ela seja instânciada já junto com a classe.