package pt.estgp.estgweb.web.filters;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.utils.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");
}
try
{
UserSessionImpl userSession =
(UserSessionImpl
) UserSessionProxy.
loadUserSession(hrequest,
((HttpServletResponse
) response
));
boolean dummy =
false;
if(userSession ==
null)
{
dummy =
true;
logger.
warn("Creating dummy UserSession: " + request.
getRemoteAddr() +
" : " + request.
getRemoteHost() +
" : " + request.
getRemotePort());
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(ServletException e
)
{
logger.
error(e,e
);
if(e.
getRootCause() !=
null)
{
logger.
error(e.
getRootCause(),e.
getRootCause());
}
}
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
}
}