Subversion Repositories bacoAlunos

Rev

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.web.UserSessionProxy;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;

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

/**
 *
 * @author  Jorge Machado
 */


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

    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)
    {

    }

    /**
     *
     * @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;
        if(((HttpServletRequest)request).getServletPath().indexOf("errorNoCookies.do")>=0 || !hrequest.isRequestedSessionIdFromCookie())
            chain.doFilter(request,response);
        try
        {
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(hrequest);
            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);
                }
                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)
            {
                ((HttpServletRequest)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 (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
    }

}