Bom dia!
Estou fazendo alguns testes com Spring Security, mas ele não está encriptografando as senhas, nem reconhece se usuário está autenticado. Na jsp, nas opções do cabeçalho, só aparece a opção de Login, e quando eu faço login, não muda a opção para Logou, nem consigo acessar o mapeamento "historico".
O que pode ser?
SecurityConfiguration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private UsuarioDAO usuarioDao;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(usuarioDao).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/controle/**").hasRole("USUAR")
.antMatchers("/historico").hasRole("USUAR")
.antMatchers("/blog").hasRole("USUAR")
.antMatchers("/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/cadastro/form-login")
.permitAll()
.and()
.logout().permitAll()
.and()
.exceptionHandling().accessDeniedPage("/errors/403")
.and()
.rememberMe().userDetailsService(userDetailsService);
}
Login Controller
@RequestMapping("efetuaLogin")
public String efetuaLogin(Usuario usuario, HttpSession session) {
System.out.println("Acessando Login");
boolean existeUsuario = usuarioDao.loadUserByUsername(usuario.getEmail()) != null;
if (existeUsuario) {
session.setAttribute("usuarioLogado", usuario);
System.out.println("Usuário logado: " + session.getId());
return "redirect:home";
} else {
System.out.println("Usuário não existe");
return "cadastro/form-login";
}
UsuarioDao
@Repository
public class UsuarioDAO implements UserDetailsService {
@PersistenceContext
private EntityManager manager;
public void save(Usuario usuario) {
manager.persist(usuario);
}
public Usuario findOne(Integer id) {
return manager.find(Usuario.class, id);
}
@Override
public UserDetails loadUserByUsername(String email) {
System.out.println("loadUserByUsername");
List<Usuario> usuarios = manager.createQuery("select u from Usuario u where email = :email", Usuario.class)
.setParameter("email", email)
.getResultList();
if(usuarios.isEmpty()) {
System.out.println("Usuario " + email + " não foi encontrado");
return null;
}
return usuarios.get(0);
}
cabecalho.jsp
<header>
<ul>
<li><a href="${contextPath}home">Início</a></li>
<li><a href="${contextPath}blog">Blog</a></li>
<security:authorize access="hasRole('ROLE_USUAR')">
<li><a href="${contextPath}historico">Meu Histórico</a></li>
</security:authorize>
</ul>
<security:authorize access="!isAuthenticated()">
<ul>
<li><a href="${contextPath}loginForm">Login</a></li>
</ul>
</security:authorize>
<security:authorize access="isAuthenticated()">
<ul>
<li><a href="${contextPath}logout">Sair</a></li>
</ul>
</security:authorize>
</header>