Tornar os recursos JSF acessíveis ao público com o Spring Security
Eu implementei a segurança da primavera no meu aplicativo jsf. Tudo está funcionando bem, exceto que os recursos estáticos exigem autenticação. Esta é a minha configuração
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/register", "/resources/**").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll()
.usernameParameter("username").passwordParameter("password")
.and().exceptionHandling().accessDeniedPage("/Access_Denied");
}
Depois de fazer algumas pesquisas no google, a maioria das soluções foi adicionar a etiqueta de recurso mvc.
<mvc:resources mapping="/resources/**" location="/resources/"
cache-period="31556926"/>
Encontrei anotação semelhante e adicionei uma classe de configuração para este
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
// equivalents for <mvc:resources/> tags
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
}
// equivalent for <mvc:default-servlet-handler/> tag
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
Mas ainda os recursos estáticos exigem autenticação. Alguma ajuda seria boa sobre como fazer isso funcionar.
Nota: meus recursos são colocados em/src/main/webapp/resources/{css|js|image}
. E o problema é que, se o usuário não estiver logado, o efeito do css, js não será exibido na página de login. Depois que um usuário faz login uma vez, e depois chega à página de login após o login, o efeito css é exibido.