1 5 package org.exoplatform.portal.filter; 6 7 import java.io.IOException ; 8 import javax.servlet.*; 9 import javax.servlet.http.HttpServletRequest ; 10 import javax.servlet.http.HttpServletResponse ; 11 import javax.servlet.http.HttpSession ; 12 import org.apache.commons.logging.Log; 13 import org.exoplatform.commons.utils.ExceptionUtil; 14 import org.exoplatform.container.PortalContainer; 15 import org.exoplatform.container.RootContainer; 16 import org.exoplatform.container.SessionContainer; 17 import org.exoplatform.container.client.http.HttpClientInfo; 18 import org.exoplatform.container.monitor.ActionData; 19 import org.exoplatform.container.monitor.SessionMonitor; 20 import org.exoplatform.portal.session.PortalResources; 21 import org.exoplatform.portal.session.RequestInfo; 22 import org.exoplatform.services.database.HibernateServiceContainer; 23 import org.exoplatform.services.log.LogService; 24 30 public class PrivateRequestFilter implements Filter { 31 32 private Log log_ ; 33 private String portalName_ ; 34 private HibernateServiceContainer hserviceContainer_; 35 36 public void init(FilterConfig filterConfig) { 37 portalName_ = filterConfig.getServletContext().getServletContextName() ; 38 PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ; 39 if(pcontainer == null){ 40 pcontainer = RootContainer.getInstance().createPortalContainer(filterConfig.getServletContext()); 41 } 42 PortalContainer.setInstance(pcontainer) ; 43 hserviceContainer_ = 44 (HibernateServiceContainer) pcontainer.getComponentInstanceOfType(HibernateServiceContainer.class) ; 45 LogService lservice = (LogService) pcontainer.getComponentInstanceOfType(LogService.class) ; 46 log_ = lservice.getLog("org.exoplatform.portal.filter") ; 47 PortalContainer.setInstance(null) ; 48 } 49 50 public void doFilter(ServletRequest request, ServletResponse response, 51 FilterChain chain) throws IOException , ServletException { 52 long start = System.currentTimeMillis() ; 53 PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ; 54 PortalContainer.setInstance(pcontainer) ; 55 HttpServletRequest httpRequest = (HttpServletRequest ) request ; 56 HttpSession session = httpRequest.getSession() ; 57 SessionContainer scontainer = (SessionContainer)pcontainer.getComponentInstance(session.getId()) ; 58 RequestInfo rinfo = null ; 59 if(scontainer != null) { 60 PortalResources appres = 61 (PortalResources)scontainer.getComponentInstanceOfType(PortalResources.class); 62 appres.getLocaleConfig().setInput(httpRequest) ; 63 rinfo = (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class); 64 } 65 try { 66 String remoteUser = httpRequest.getRemoteUser() ; 67 if (rinfo == null || 68 rinfo.getAccessibility() != RequestInfo.PRIVATE_ACCESS) { 69 Util.removeAttribute(session) ; 70 scontainer = pcontainer.createSessionContainer(session.getId(), remoteUser) ; 71 scontainer.getMonitor().setClientInfo(new HttpClientInfo(httpRequest)) ; 72 rinfo = (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class); 73 } 74 rinfo.init(httpRequest, RequestInfo.PRIVATE_ACCESS) ; 75 if(!remoteUser.equals(rinfo.getPortalOwner())) { 76 HttpServletResponse httpResponse = (HttpServletResponse ) response ; 77 httpResponse.sendRedirect(httpRequest.getContextPath() + "/access-error.jsp") ; 78 return ; 79 } 80 scontainer.startActionLifcycle() ; 81 httpRequest.setAttribute("javax.servlet.include.path_info", rinfo.getViewId()) ; 82 chain.doFilter(request, response) ; 83 } catch (Throwable ex) { 84 ex = ExceptionUtil.getRootCause(ex) ; 85 log_.error("Error: ", ex) ; 86 } finally { 87 hserviceContainer_.closeAllSessions() ; 88 long end = System.currentTimeMillis() ; 89 ActionData data = new ActionData(rinfo.getPortalOwner(), 90 rinfo.getPageName(), 91 httpRequest.getMethod(), 92 end - start, 93 httpRequest.getParameterMap()) ; 94 SessionMonitor monitor = scontainer.getMonitor() ; 95 if(monitor != null)monitor.log(data) ; 96 scontainer.endActionLifcycle() ; 97 PortalContainer.setInstance(null) ; 98 } 99 } 100 101 public void destroy() { 102 } 103 } 104 | Popular Tags |