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

Dúvida neste exemplo de configuração

Contexto: Como estou seguindo a carreira Spring, um dos cursos de Spring MVC mostra a utilização de Spring Security, com a mesma classe que este curso de Spring Boot. Lembro-me, que o instrutor deste curso de Spring MVC colocou o JavaScript e CSS dentro das próprias páginas HTML (junto ao thymeleaf). Então no caso dele não foi necessário configurar recursos estáticos (Agora entendi porque ele não separou os arquivos, risos). De qualquer maneira, eu havia feito tudo separado e tive o problema com o Spring bloqueando recursos como CSS e JS. Para resolver o problema, fiz algumas tentativas do stackoverflow e cheguei no seguinte código:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
    @Autowired
    private DataSource dataSource;

    // Configuracoes de autenticacao
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception
    {
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

        /*
        UserDetails user = User.builder()
                                        .username("jonas")
                                        .password(encoder.encode("jonas"))
                                        .roles("ADM")
                                        .build();
        */

        auth.jdbcAuthentication()
                                .dataSource(dataSource)
                                .passwordEncoder(encoder);
                                //.withUser(user);
    }

    // Configuracoes de autorizacao
    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
        http
        .authorizeRequests()
            .antMatchers("/", "/inicio", "/**/*.js", "/**/*.css").permitAll()
            .anyRequest().authenticated()
        .and()
        .formLogin(form -> form
                .loginPage("/login")
                .defaultSuccessUrl("/pedido/todos", true)
                .permitAll()
        )
        .logout(logout -> logout.logoutUrl("/logout")
                .logoutSuccessUrl("/inicio")
        )
        .csrf().disable();
    }
}

E finalmente, a dúvida: reparem que eu fiz a configuração de recursos estáticos no lugar errado, afinal, eu nem sabia da existência dos outros métodos. Por que que isto funciona? O Spring de fato permite isso porém (sem saber) fiz uma má prática ou é totalmente ... gambiarra?

1 resposta
solução!

Oi Arthur,

Configurar os recursos estáticos da maneira que você fez também funciona, sem gerar nenhum tipo de problema.

Mas o recomendado é ficar no método configure(WebSecurity web) pois assim o Spring considera que é para ignorar a requisição e nem "perde tempo" fazendo a checagem de urls para saber se pode ou não liberar.

Bons estudos!