Olá pessoal
Estou tentando implementar um controle de acesso na minha aplicação em JSF, para isso criei um Servlet Filter, porém a minha sessão não chega até lá…
//UsuarioMB.java
public String logar()
{
FacesUtil.setSessionMapValue("userSession", this.usuario);
return "success";
}
Este método acima (reduzido só para entendimento), registra apenas a sessão do bean Usuario, que fora instanciado nesta classe (UsuarioMB.java).
[code]//FacesUtil.java
public class FacesUtil
{
// remove objeto da sessao
public static void removeSessionMapValue(String key) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(key);
}
// Getters -----------------------------------------------------------------------------------
public static Object getRequestMapValue(String key) {
return FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(key);
}
// Setters -----------------------------------------------------------------------------------
public static void setRequestMapValue(String key, Object value) {
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put(key, value);
}
// Getters -----------------------------------------------------------------------------------
public static Object getSessionMapValue(String key) {
return FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(key);
}
// Setters -----------------------------------------------------------------------------------
public static void setSessionMapValue(String key, Object value) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(key, value);
}
}[/code]
A partir dos métodos do FacesUtil acima, eu deveria manipular a sessão desejada.
No próprio UsuarioMB.java eu tenho um método que verifica se a sessão existe.
//UsuarioMB.java
public boolean verifySession()
{
Usuario u = (Usuario)FacesUtil.getSessionMapValue("userSession");
if(u != null) return true;
else return false;
}
E por último, meu Filter…
[code]//SecutiryFilter.java
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
HttpServletResponse resp = (HttpServletResponse)response;
UsuarioMB u = new UsuarioMB();
if(u.verifySession()) chain.doFilter(request, response);
else resp.sendRedirect("/login.xhtml");
}[/code]
Quando eu rodo a aplicação dá NullPointerException, justamente na linha onde eu tento recuperar a sessão, como se ela não existisse. Porém no momento que o método logar é executado, eu fiz um teste e imprimi o conteúdo da sessão userSession logo após ter registrado ela, e funcionou na boa, então eu sei que ela existe.
Por que será que não consigo recuperá-la? Alguém já passou por isso?