Subversion Repositories bacoAlunos

Rev

Rev 1103 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.web.filters;

import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/**
 *
 * @author  Jorge Machado
 */


public class UserSessionFilter implements 1.5.0/docs/api/java/util/logging/Filter.html">Filter
{


    public static final List<String> FILTER_IGNORE_EXTENSIONS = Globals.FILTER_IGNORE_EXTENSIONS;
    public static final List<String> FILTER_IGNORE_PREFIXES = Globals.FILTER_IGNORE_PREFIXES;

    private static 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(UserSessionFilter.class);


    public UserSessionFilter()
    {
    }

    public void init(FilterConfig config)
    {
        try
        {
            IServiceManager sm = ServiceManager.getInstance();
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{"system"};
            sm.execute("system","LoadUserSession",args);
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.fatal("INIT FILTER SESSION FILTER CALLING FIRST SERVICE TO OPEN CONNECTIONS IN HIBERNATE" + e,e);
        }
    }

    /**
     *
     * @param request The servlet request we are processing
     * @param chain The filter chain we are processing
     *
     * @exception java.io.IOException if an input/output error occurs
     * @exception javax.servlet.ServletException if a servlet error occurs
     */

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws 1.5.0/docs/api/java/io/IOException.html">IOException, ServletException
    {

        HttpServletRequest hrequest = (HttpServletRequest) request;
        1.5.0/docs/api/java/lang/String.html">String relativePath = hrequest.getServletPath();
        if (relativePath == null)
            relativePath = "";

        if (hrequest.getPathInfo() != null && hrequest.getPathInfo().length() > 0)
        {
            relativePath += hrequest.getPathInfo();
        }

        for (1.5.0/docs/api/java/lang/String.html">String ignore : FILTER_IGNORE_EXTENSIONS)
        {
            if (relativePath.endsWith(ignore))
            {
                chain.doFilter(request, response);
                return;
            }
        }
        for (1.5.0/docs/api/java/lang/String.html">String ignore : FILTER_IGNORE_PREFIXES)
        {
            if (relativePath.startsWith(ignore))
            {
                chain.doFilter(request, response);
                return;
            }
        }

        if(((HttpServletRequest)request).getServletPath().indexOf("errorNoCookies.do")>=0 || !hrequest.isRequestedSessionIdFromCookie())
        {
            chain.doFilter(request,response);
            logger.info("COOKIE lost");
            return;
        }
        try
        {
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(hrequest,((HttpServletResponse) response));
            boolean dummy = false;
            if(userSession == null)
            {
                dummy = true;
                1.5.0/docs/api/java/lang/System.html">System.out.println("Creating dummy UserSession");
                userSession = new UserSessionImpl();//creating a dummy there is no cookie
                request.setAttribute(Globals.USER_SESSION_KEY,userSession);
                userSession.setIpAddress(request.getRemoteAddr() + " : " + request.getRemoteHost() + " : " + request.getRemotePort());
                userSession.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
                userSession.setNowConfiguration(DaoFactory.getConfigurationDaoImpl().loadSimpleConfigurationForConsult());
                chain.doFilter(request,response);
                return;
            }

            request.setAttribute(Globals.USER_SESSION_KEY,userSession);
            userSession.setIpAddress(request.getRemoteAddr() + " : " + request.getRemoteHost() + " : " + request.getRemotePort());
            1.5.0/docs/api/java/lang/String.html">String lang = request.getParameter("language");
            if (lang != null)
            {
                userSession.setLanguage(lang);
                try
                {
                    userSession.serialize((HttpServletRequest)request,(HttpServletResponse)response);
                }
                catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
                {
                    logger.error(e,e);
                    ((HttpServletResponse)response).sendError(500);
                    return;
                }
            }
            if(userSession.getLanguage() != null)
            {
                request.setAttribute(org.apache.struts.Globals.LOCALE_KEY, new 1.5.0/docs/api/java/util/Locale.html">Locale(userSession.getLanguage()));
                ((HttpServletRequest)request).getSession().setAttribute(org.apache.struts.Globals.LOCALE_KEY, new 1.5.0/docs/api/java/util/Locale.html">Locale(userSession.getLanguage()));
            }
            chain.doFilter(request,response);
        }
        //catch (IllegalStateException e)
        //{
        //    logger.warn(e);
        //}
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            if(e instanceof NoCookiesException)
            {
                chain.doFilter(request,response);
            }
            else
            {
                logger.error(e,e);
                ((HttpServletResponse)response).sendError(500);
            }
        }
    }


    public void destroy()
    {
        // Nothing
    }

}