Salve galera, tudo beleza?
Galera, TCC chegando aí e to com um probleminha:
tenho uma aplicação em que preciso fazer autenticação de usuário e não conseguia.
Comecei a ver um pouco sobre o PhaseListener e resolvi utilizá-lo porque é simples e prático.
Analisando uns tutoriais na net encontrei esse, encontrei esse http://hslife.com.br/2010/12/18/controle-de-acesso-com-phaselistener/#codesyntax_8
e achei bem simples.
Vejam esses trechos de código que eu fiz para minha aplicação a partir do tuto:
PhaseListener
[code]public class ControladorPhaseListener implements PhaseListener {
@Override
public void afterPhase(PhaseEvent evento) {
//Obtem o contexto atual
FacesContext contexto = evento.getFacesContext();
//Obtem a pagina que atualmente esta interagindo com o ciclo
String paginaAtual = contexto.getViewRoot().getViewId();
//Se a pagina for a de usuario, seta a variavel como true
boolean isPaginaLogin = paginaAtual.lastIndexOf("faces/login.xhtml") > -1;
//Obtem a sessao atual
HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
//Resgata o nome do usuario logado
String usuario = (String) sessao.getAttribute("loginUsuario");
//Verifica se o usuario esta logado e se nao esta na pagina de usuario
if (!isPaginaLogin || usuario == null) {
//Redireciona para a pagina de usuario
NavigationHandler navigationHandler = contexto.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(contexto, null, "sair");
} else if (isPaginaLogin && usuario != null) {
//Se o usuario tentar acessar a pagina de usuario, ele e direcionado para a pagina inicial
NavigationHandler navigationHandler = contexto.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(contexto, null, "sucesso");
}
}
@Override
public void beforePhase(PhaseEvent evento) {
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}[/code]
ControladorAcessoMB:
[code]@ManagedBean
@RequestScoped
public class ControladorAcessoMB {
private String nomeUsuario;
private String loginUsuario;
private String senhaUsuario;
public ControladorAcessoMB() {
FacesContext contexto = FacesContext.getCurrentInstance();
HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
nomeUsuario = (String) sessao.getAttribute("nomeUsuario");
loginUsuario = (String) sessao.getAttribute("loginUsuario");
senhaUsuario = (String) sessao.getAttribute("senhaUsuario");
}
public String obterSessao() {
return “sessao”;
}
public String validarAcesso() {
FacesContext contexto = FacesContext.getCurrentInstance();
HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
sessao.setAttribute("nomeUsuario", nomeUsuario);
sessao.setAttribute("loginUsuario", loginUsuario);
sessao.setAttribute("senhaUsuario", senhaUsuario);
return "sucesso";
}
public String sair() {
FacesContext contexto = FacesContext.getCurrentInstance();
HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
sessao.invalidate();
nomeUsuario = null;
loginUsuario = null;
senhaUsuario = null;
return "sair";
}
//getters e setters[/code]
login.xhtml:
<h:form id='formulario'>
<h:panelGrid columns='2'>
<p:outputLabel value="Login: " />
<p:inputText id='txtLogin'
value="#{controladorAcessoMB.loginUsuario}" />
<p:outputLabel value='Senha: ' />
<p:password id='txtSenha'
value='#{controladorAcessoMB.senhaUsuario}' />
<p:commandButton value="Entrar"
icon='ui-icon-check'
action="#{controladorAcessoMB.obterSessao()}">
</p:commandButton>
</h:panelGrid>
</h:form>
Preciso de duas coisas:
- Podem me explicar o que os métodos validarAcesso() e sair() da classe ControladoraAcessoMB faz? Para que se eu for interrogado eu possa explicar rsrs
- Porque quando executo a aplicação o log exibe um ‘java.lang.NullPointerException’ para essa linha:
nomeUsuario = (String) sessao.getAttribute("nomeUsuario");?
Obrigado galera
[]'s
