Pessoal, boa tarde. Estou na aula 04 do curso Spring MVC II e fiz as configurações do Spring MVC para utilizar a funcionalidade de login, porém não está funcionando. O Spring não redireciona, em nenhum momento, para uma tela de login. Posso acessar diretamente a tela de cadastro de produtos por exemplo.
Estou abrindo esse tópico pois pesquisei todos os tópicos abertos neste curso, e não achei nenhum que resolveu o meu problema.
ServletSpringMVC
package br.com.casadocodigo.loja.conf;
import javax.servlet.Filter;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {SecurityConfiguration.class, AppWebConfiguration.class, JPAConfiguration.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] {characterEncodingFilter};
}
@Override
protected void customizeRegistration(Dynamic registration) {
registration.setMultipartConfig(new MultipartConfigElement(""));
}
}
SecurityConfiguration
package br.com.casadocodigo.loja.conf;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import br.com.casadocodigo.loja.dao.UsuarioDao;
// Aqui eu testei com as duas notações, usando versões diferentes do spring-security no pom. Nenhuma delas funcionou.
//@EnableWebMvcSecurity
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UsuarioDao usuarioDao;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/produtos/form").hasRole("ADMIN")
.antMatchers("/carrinho/**").permitAll()
.antMatchers(HttpMethod.POST, "/produtos").hasRole("ADMIN")
.antMatchers(HttpMethod.GET, "/produtos").hasRole("ADMIN")
.antMatchers("/produtos/**").permitAll()
.antMatchers("/resources/**").permitAll()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and().formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(usuarioDao)
.passwordEncoder(new BCryptPasswordEncoder());
}
}
SpringSecurityFilterConfiguration
package br.com.casadocodigo.loja.conf;
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
public class SpringSecurityFilterConfiguration extends AbstractSecurityWebApplicationInitializer{
}
Pesquisei muito no Stack Overflow. Fiz outros tutoriais que encontrei. Mudei as versões usadas no pom.xml (usei a 4.0.0.M2 apresentada no curso, 4.0.3.RELEASE, 4.2.3.RELEASE que tem no mvnrepository). Deletei o deploy da aplicação no Wildfly e coloquei novamente. Nada.
Meu pom.xml está assim agora:
org.springframework.security
spring-security-config
4.0.3.RELEASE
org.springframework.security
spring-security-taglibs
4.0.3.RELEASE
org.springframework.security
spring-security-web
4.0.3.RELEASE
org.springframework.security
spring-security-core
4.0.3.RELEASE
Algumas infos que podem ser úteis: To usando Wildfly 11; MySql 5.6.39 Eclipse Oxygen 2.
Quando avancei um pouco mais na aula, reparei que o Spring não criou automaticamente a tabela Usuario no banco de dados. Sei que isso pode ser um problema diferente, mas me fez questionar se fiz alguma configuração do Spring errado. De qualquer forma, revisei a classe JPAConfiguration e está ok.
Se precisarem de mais alguma informação, classe, configuração, por favor me avisem.
Muito obrigado!