96 lines
3.8 KiB
Plaintext
Executable File
96 lines
3.8 KiB
Plaintext
Executable File
package com.fp.frontend.filter;
|
|
|
|
import java.io.IOException;
|
|
|
|
import javax.faces.FactoryFinder;
|
|
import javax.faces.component.UIViewRoot;
|
|
import javax.faces.context.FacesContext;
|
|
import javax.faces.context.FacesContextFactory;
|
|
import javax.faces.lifecycle.Lifecycle;
|
|
import javax.faces.lifecycle.LifecycleFactory;
|
|
import javax.servlet.Filter;
|
|
import javax.servlet.FilterChain;
|
|
import javax.servlet.FilterConfig;
|
|
import javax.servlet.ServletContext;
|
|
import javax.servlet.ServletException;
|
|
import javax.servlet.ServletRequest;
|
|
import javax.servlet.ServletResponse;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;
|
|
|
|
public class TimeoutManagerFilter implements Filter {
|
|
|
|
|
|
private String contextPath;
|
|
|
|
@Override
|
|
public void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) throws IOException, ServletException {
|
|
HttpServletRequest request = (HttpServletRequest) paramServletRequest;
|
|
HttpServletResponse response = (HttpServletResponse) paramServletResponse;
|
|
String path = request.getServletPath();
|
|
|
|
|
|
if ((path.contains("/javax.faces.resource/")) || ((!path.endsWith(".jsf")) && (!path.endsWith(".xhtml"))))
|
|
{
|
|
paramFilterChain.doFilter(paramServletRequest, paramServletResponse);
|
|
return;
|
|
}
|
|
if(this.contextPath==null) {
|
|
this.contextPath = request.getContextPath();
|
|
}
|
|
|
|
try {
|
|
FacesContext facesContext = FacesContext.getCurrentInstance();
|
|
if (facesContext == null)
|
|
{
|
|
FacesContextFactory contextFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
|
|
LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
|
|
Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
|
|
|
|
ServletContext servletContext = request.getSession().getServletContext();
|
|
facesContext = contextFactory.getFacesContext(servletContext, paramServletRequest, paramServletResponse, lifecycle);
|
|
InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);
|
|
if (null == facesContext.getViewRoot())
|
|
{
|
|
facesContext.setViewRoot(new UIViewRoot());
|
|
}
|
|
}
|
|
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
|
|
|
|
TsafeUserDetail currentUser = session!=null ? (TsafeUserDetail) session.getAttribute("TSAFEUSERDETAIL"):null;
|
|
boolean isIndexPage = path.endsWith("index.xhtml") || path.endsWith(this.contextPath+"/");
|
|
boolean isLoginPage = path.endsWith("login.xhtml");
|
|
|
|
if (!isLoginPage && !isIndexPage && (currentUser == null)) {
|
|
response.sendRedirect(this.contextPath+"/login.xhtml");
|
|
}else if(isLoginPage && (currentUser!=null)){
|
|
response.sendRedirect(this.contextPath+"/pages/workspace.xhtml");
|
|
}
|
|
|
|
} catch (Throwable e) {
|
|
e.printStackTrace();
|
|
return;
|
|
}
|
|
paramFilterChain.doFilter(paramServletRequest, paramServletResponse);
|
|
}
|
|
|
|
private abstract static class InnerFacesContext extends FacesContext
|
|
{
|
|
protected static void setFacesContextAsCurrentInstance(final FacesContext facesContext)
|
|
{
|
|
FacesContext.setCurrentInstance(facesContext);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void destroy() {
|
|
}
|
|
|
|
@Override
|
|
public void init(FilterConfig filterConfig) throws ServletException {
|
|
}
|
|
|
|
} |