Olá,
Estou começando a futucar JSF agora e estou tentando implementar um Login…
No meu login eu gostaria de recuperar um atributo da sessão e verificar se o usuário está autenticado antes de executar qualquer método de qualquer bean.
Peguei um bean da aplicação e fiz o tratamento no seu construtor, dando um redirect quando necessário. Como previsto, ele funciona na primeira vez, mas nas próximas da pau…
Não quero ter que implementar a verificação em todos os métodos do bean, como faço para colocar em um lugar só???
O construtor da classe está escrito abaixo (parecida com a do tutorial do site)
public AgendaDB(){
try{
Object session = context.getExternalContext().getSession(false);
ViewHandler vh = context.getApplication().getViewHandler();
String viewUrl = vh.getActionURL(context, "/index.jsf");
if(session == null)
context.getExternalContext().dispatch(viewUrl);
else
{
HttpSession sessao = (HttpSession) session;
System.out.println("VAlor em sessao = " + sessao );
System.out.println("VAlor em atributo da sessao = " + sessao.getAttribute("autenticacao") );
if(sessao.getAttribute("autenticacao") == null)
{
System.out.println("fez redirect dis");
context.getExternalContext().redirect(viewUrl);
return;
}
else if(!((Boolean)sessao.getAttribute("autenticacao")).booleanValue())
{
System.out.println("fez redirect 2");
context.getExternalContext().redirect(viewUrl);
return;
}
}
}catch(IOException i){
i.printStackTrace();
return;
}
if (con == null) {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager
.getConnection("jdbc:mysql://localhost/jsf_testes", "root", "flutopo");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
