Pessoal,
Estou fazendo login usando o Spring Security e está funcionando sem problemas. O problema está no logout. Quando clico em logout, aparece esse erro:
Informações: Exception when handling error trying to reset the response.
java.lang.IllegalStateException: Cannot create a session after the response has been committed
Não é a primeira vez que esse erros aparece. Quando eu altero algum escopo dos meus controllers aparece esse erro.
O meu usuario controller utiliza SessionScoped e o resto dos meus controllers utiliza View Scoped, não posso alterar isso, mas quero consertar esse erro, se alguém puder me ajudar.
BOTAO:
<p:menuitem value="Sair" icon="ui-icon ui-icon-power"
action="#{usuarioController.logout}" ajax="false"/>
CONTROLLER:
@ManagedBean(name = "usuarioController")
@SessionScoped
public final class UsuarioController implements Serializable {
private Usuario usuario;
private UsuarioDao usuarioDao;
public UsuarioController() {
usuario = new Usuario();
usuarioDao = new UsuarioDaoImp();
this.validarLogin();
}
//Valida o login com o Spring Security 3
public void validarLogin() {
SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
if (context instanceof SecurityContext) {
if (authentication instanceof Authentication) {
usuario.setLogin(((User) authentication.getPrincipal()).getUsername());
usuario = usuarioDao.carregarUsuarioPeloLogin(usuario.getLogin());
}
}
}
//Desloga o usuário logado - Spring Security 3
public String logout() throws ServletException, IOException {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
RequestDispatcher dispatcher = ((ServletRequest) ec.getRequest()).getRequestDispatcher("/j_spring_security_logout");
dispatcher.forward((ServletRequest) ec.getRequest(), (ServletResponse) ec.getResponse());
FacesContext.getCurrentInstance().responseComplete();
return "login";
}
}
Todos os outros controllers estão utilizadno @ViewScoped e funcionam corretamente, o login funciona, o problema é o logout.