Bom galera, fiz a área administrativa do sistema mas está com um problema. Depois que eu me logo no sistema ele não me deixa
navegar pelas páginas que necessitam de usuário/senha, tipo assim, me logo no sistema e então vou para a página de cadastro de produto
mas então se a partir daí eu quero ir para a página de cadastro de usuário o sistema pede para eu me logar novamente, então como eu resolvo isso ??
Fiz isso através do PhaseListener, abaixo minhas classes.
package utils;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;
import model.Usuario;
/**
*
* @author Egon Henrique
*/
public class AuthorizationListener implements PhaseListener {
private static final long serialVersionUID = 1L;
@Override
public void afterPhase(PhaseEvent event) {
//dquirindo FacesContext
FacesContext facesContext = event.getFacesContext();
//Armazenando página que fez requisição
String currentPage = facesContext.getViewRoot().getViewId();
//Verifica se é página de login
boolean isLoginPage = (currentPage.lastIndexOf("index.xhtml") > -1) ||
(currentPage.lastIndexOf("contato.xhtml") > -1) || (currentPage.lastIndexOf("queijos.xhtml") > -1);
//Adquirindo a sessão(é a mesma onde deverá guardar o usuário no nível de sessão
//com o descritor currentUser
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
//Recuperando valor da sessão
Usuario user = (Usuario) session.getAttribute("currentUser");
//Se não ta logado, redireciona para lógica que(navigation rule) atende a loginPage
if(!isLoginPage && user == null) {
NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
nh.handleNavigation(facesContext, null, "loginPage");
}
}
//}
@Override
public void beforePhase(PhaseEvent event) {
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
package controller;
import DAO.UsuarioDAO;
import javax.faces.component.UIData;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import model.Usuario;
/**
*
* @author Egon Henrique
*/
public class UsuarioController {
private Usuario usuario;
private String senha;
private String login;
private Usuario usuarios;
private UIData tabela;
private UsuarioDAO usuarioDAO;
public UIData getTabela() {
return tabela;
}
public void setTabela(UIData tabela) {
this.tabela = tabela;
}
public Usuario getUsuarios() {
return usuarios;
}
public void setUsuarios(Usuario usuarios) {
this.usuarios = usuarios;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public UsuarioController() {
usuario = new Usuario();
preencherTabela();
}
public String Salvar() throws Exception {
usuarioDAO = new UsuarioDAO();
//this.produto.setFoto(foto);
usuarioDAO.inserir(usuario);
usuario = new Usuario();
preencherTabela();
return null;
}
public void preencherTabela() {
usuarioDAO = new UsuarioDAO();
usuarios = usuarioDAO.getUsuario();
}
public void excluir(Usuario usuario) {
usuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(tabela.getVar());
usuarioDAO = new UsuarioDAO();
usuarioDAO.delete(usuario);
preencherTabela();
}
public String doLogin() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
usuarioDAO = new UsuarioDAO();
usuario = usuarioDAO.getUsuario();
if(login.equalsIgnoreCase(usuario.getLogin()) && senha.equalsIgnoreCase(usuario.getSenha())) {
usuario = new Usuario();
usuario.setLogin(login);
usuario.setSenha(senha);
session.setAttribute("usuario", usuario);
login = null;
senha = null;
return "cadastroProduto.xhtml";
} else {
return "login.xhtml";
}
}
<navigation-rule>
<from-view-id>page/cadastroProduto.xhtml</from-view-id>
<navigation-case>
<from-outcome>loginPage</from-outcome>
<to-view-id>page/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>page/cadastroOvelha.xhtml</from-view-id>
<navigation-case>
<from-outcome>loginPage</from-outcome>
<to-view-id>page/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>page/cadastroUsuario.xhtml</from-view-id>
<navigation-case>
<from-outcome>loginPage</from-outcome>
<to-view-id>page/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<lifecycle>
<phase-listener>utils.AuthorizationListener</phase-listener>
</lifecycle>
</faces-config>