Minha classe SecurityFilter

Continuando a discussão do Continuação da classe authenticationaction:

package com.intelinet.servlet.filter;

import java.io.IOException;

import javax.persistence.EntityManager;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jboss.seam.Component;
import org.jboss.seam.Seam;
import org.jboss.seam.security.Identity;

import com.intelinet.biz.User;
import com.intelinet.biz.onbyte.Caixas;
import com.intelinet.seam.security.AuthenticatorAction;

@WebFilter(filterName = “SecurityFilter”, urlPatterns = “/private/*”)
public class SecurityFilter implements Filter {

private String encoding = "utf-8";
//@In Identity identity;

@Override
public void destroy() {
    // Empty
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    try {
        if (!(request instanceof HttpServletRequest)) {
            throw new ServletException("This filter can only process HttpServletRequest requests");
        }
        request.setCharacterEncoding(encoding);
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        Identity identity = (Identity) httpRequest.getSession().getAttribute( Seam.getComponentName(Identity.class) );



        User user = (User) httpRequest.getSession().getAttribute( "user");

        Boolean liberacao = (Boolean) httpRequest.getSession().getAttribute( "sistemaLiberado");

        Boolean dadosEnviados = (Boolean) httpRequest.getSession().getAttribute( "dadosEnviados");

        Boolean informarIdCliente = (Boolean) httpRequest.getSession().getAttribute( "informarIdCliente");

        AuthenticatorAction authenticatorAction = (AuthenticatorAction) httpRequest.getSession().getAttribute( Seam.getComponentName(AuthenticatorAction.class) );
        Caixas caixa=null;
        if (authenticatorAction!=null){
            caixa = authenticatorAction.getCaixa(); **//O erro ocorre aqui depois de algum tempo em execução**
        }

        if (caixa!=null){
            //Component.getInstance("entityManager");Component.getInstance("org.jboss.seam.core.conversation");
            //org.jboss.seam.contexts.ServletLifecycle.beginReinitialization((HttpServletRequest) request, request.getServletContext());
            //Collections.list(request.getServletContext().getAttributeNames());
            //((org.jboss.seam.Component) request.getServletContext().getAttribute("org.jboss.seam.core.conversation.component"));
            //((ServerConversationContext)Contexts.getConversationContext()).get("entityManager");
            //ContextAdaptor.getRequest(javax.servlet.ServletRequest request)
            //Context ctx = new SessionContext( new ServletRequestSessionMap((HttpServletRequest) request) );
            //ServerConversationContext ctx2 = new ServerConversationContext(new ServletRequestMap((HttpServletRequest) request));

            org.jboss.seam.contexts.ServletLifecycle.beginReinitialization((HttpServletRequest)request, request.getServletContext());
            org.jboss.seam.contexts.ServletLifecycle.resumeConversation((HttpServletRequest) request);
            EntityManager entityManager = ((EntityManager)Component.getInstance("entityManager", false));

            if (entityManager!=null){
                caixa = entityManager.find(Caixas.class, caixa.getNumero());
                authenticatorAction.setCaixa(caixa);
            }
        }

        String pageSetFuncionario = ((HttpServletRequest) request).getContextPath() + "/private/onbyte/SetFuncionario.jsf";
        String pageCaixasAbertura = ((HttpServletRequest) request).getContextPath() + "/private/onbyte/CaixasAbertura.jsf";
        String pageLiberacao = ((HttpServletRequest) request).getContextPath() + "/private/onbyte/LiberacaoSistema.jsf";
        String pageMovcaixaList = ((HttpServletRequest) request).getContextPath() + "/private/onbyte/MovcaixaList.jsf";
        request.getCharacterEncoding();
        /*Enumeration<String> e = ((HttpServletRequest) request).getSession().getAttributeNames();
        while (e.hasMoreElements()){
            System.out.println(e.nextElement());
        }*/
        boolean logout = false;
        String action = ((HttpServletRequest) request).getParameter("actionMethod");
        if (action!=null && action.indexOf("authenticatorAction.logout")!=-1){
            logout = true;
        }


        if (!logout && !identity.isLoggedIn()) {
            ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/index.jsf");
        }else if (!logout && (liberacao==null || !liberacao)  && !((HttpServletRequest) request).getRequestURI().equals(pageLiberacao) ){
            ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/index.jsf");
        }else if (!logout && (dadosEnviados==null || !dadosEnviados) ){
            ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/index.jsf");
        }else if (!logout && (informarIdCliente==null || informarIdCliente) ){
            ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/index.jsf");
        }else if (!logout && user==null && !((HttpServletRequest) request).getRequestURI().equals(pageSetFuncionario) ){
            ((HttpServletResponse) response).sendRedirect(pageSetFuncionario);
        }else if (!logout && (caixa==null || caixa.getDtFecha()!=null) && !((HttpServletRequest) request).getRequestURI().equals(pageSetFuncionario) && !((HttpServletRequest) request).getRequestURI().equals(pageCaixasAbertura) && !((HttpServletRequest) request).getRequestURI().equals(pageMovcaixaList)  ){
            //chain.doFilter(request, response);
            ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/index.jsf");
        }else {
            chain.doFilter(request, response);
        }
        //chain.doFilter(request, response); //request instanceof javax.servlet.http.HttpServletRequest request.getServletContext().//((Identity) org.jboss.seam.Seam.getComponentName(Identity.class)).getCredentials().getUsername()
    }catch (ServletException e) {
        e.printStackTrace();
        throw e;
    }
}


@Override
public void init(FilterConfig config) throws ServletException {
    // Empty
    String encodingParam = config.getInitParameter("encoding");
    if (encodingParam != null) {
        encoding = encodingParam;
    }
}

}