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?