Bom dia meus caros amigos, eu andei dando uma olhada em algumas formas de filtrar o usuario logado e tudo mais e vi o seguinte: Tinha uma pessoa que utilizada um filtro normal, ou seja, uma classe que implementa o filter de servlet.
Exemplo:
public class Login {
private String nome; //get/set
private String senha; //get/set
public String checkLogin() throws Exception {
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
if( nome != null && nome.equals("faces") && senha != null && senha.equals("123") ){
session.setAttribute("NOME", getNome() );
return "success";
}else{
addMessage("INFORMAÇÕES INCORRETAS!!!");
return "failure";
}
}}
e eu vi uma outra pessoa, utilizando dentro do ciclo de vida do jsf desta forma:
public class LifeCycleListener implements PhaseListener {
/**
* Serial Version UID.
*/
private static final long serialVersionUID = 1L;
/**
* Após a execução da fase.
*/
public void afterPhase(PhaseEvent fase) {
System.out.println("AfterPhase: " + fase.getPhaseId());
}
/**
* Antes da execução da fase.
*/
public void beforePhase(PhaseEvent fase) {
System.out.println("BeforePhase: " + fase.getPhaseId());
if (fase.getPhaseId().equals(PhaseId.RENDER_RESPONSE)) {
LoginMBean loginMBean = (LoginMBean) FacesContextComum
.getSessionAttribute("loginMBean");
if (loginMBean == null || !loginMBean.getAutenticado()) {
FacesContextComum.setNavegacao("login");
}
}
}
/**
* Informa o identificador da fase.
*/
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
Bem, essa forma dentro do ciclo de vida eu não gostei muito. Gostaria da opinião de vocês em questão de segurança. Qual seria uma boa solução para isso ?