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.portal.session.PortalResources; 20 import org.exoplatform.portal.session.RequestInfo; 21 import org.exoplatform.services.database.HibernateServiceContainer; 22 import org.exoplatform.services.log.LogService; 23 import org.exoplatform.services.portal.PortalACL; 24 import org.exoplatform.services.portal.PortalConfigService; 25 import org.exoplatform.services.portal.model.PortalConfig; 26 32 public class PublicRequestFilter implements Filter { 33 private Log log_ ; 34 private PortalACL portalACL_ ; 35 private String portalName_ ; 36 private HibernateServiceContainer hserviceContainer_; 37 private PortalConfigService configService_ ; 38 39 public void init(FilterConfig filterConfig) { 40 portalName_ = filterConfig.getServletContext().getServletContextName() ; 41 PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ; 42 if(pcontainer == null){ 43 pcontainer = RootContainer.getInstance().createPortalContainer(filterConfig.getServletContext()); 44 } 45 PortalContainer.setInstance(pcontainer) ; 46 portalACL_ = (PortalACL) pcontainer.getComponentInstanceOfType(PortalACL.class) ; 47 configService_ = 48 (PortalConfigService) pcontainer.getComponentInstanceOfType(PortalConfigService.class) ; 49 hserviceContainer_ = 50 (HibernateServiceContainer) pcontainer.getComponentInstanceOfType(HibernateServiceContainer.class) ; 51 LogService lservice = (LogService) pcontainer.getComponentInstanceOfType(LogService.class) ; 52 log_ = lservice.getLog("org.exoplatform.portal.filter") ; 53 PortalContainer.setInstance(null) ; 54 } 55 56 public void doFilter(ServletRequest request, ServletResponse response, 57 FilterChain chain) throws IOException , ServletException { 58 long start = System.currentTimeMillis() ; 59 PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ; 60 PortalContainer.setInstance(pcontainer) ; 61 HttpServletRequest httpRequest = (HttpServletRequest ) request ; 62 HttpSession session = httpRequest.getSession() ; 63 SessionContainer scontainer = (SessionContainer)pcontainer.getComponentInstance(session.getId()) ; 64 RequestInfo rinfo = null ; 65 66 if(scontainer != null) { 67 PortalResources appres = 68 (PortalResources)scontainer.getComponentInstanceOfType(PortalResources.class); 69 appres.getLocaleConfig().setInput(httpRequest) ; 70 rinfo = (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class); 71 } 72 try { 73 String owner = RequestInfo.getPortalOwner(httpRequest) ; 75 if (scontainer == null || 76 rinfo.getAccessibility() != RequestInfo.PUBLIC_ACCESS || 77 !rinfo.getPortalOwner().equals(owner)) { 78 Util.removeAttribute(session) ; 79 PortalConfig config = configService_.getPortalConfig(owner) ; 80 if(!portalACL_.hasViewPortalPermission(config, null)) { 81 HttpServletResponse httpResponse = (HttpServletResponse ) response ; 82 pcontainer.removeSessionContainer(session.getId()) ; 83 httpResponse.sendRedirect(httpRequest.getContextPath() + "/access-error.jsp") ; 84 return ; 85 } 86 if(scontainer != null) { 87 pcontainer.removeSessionContainer(session.getId()) ; 88 } 89 scontainer = pcontainer.createSessionContainer(session.getId(), owner) ; 90 scontainer.getMonitor().setClientInfo(new HttpClientInfo(httpRequest)) ; 91 rinfo = (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class); 92 } 93 rinfo.init(httpRequest, RequestInfo.PUBLIC_ACCESS) ; 94 scontainer.startActionLifcycle(); 95 httpRequest.setAttribute("javax.servlet.include.path_info", rinfo.getViewId()) ; 96 chain.doFilter(request, response) ; 97 } catch (Throwable ex) { 98 ex = ExceptionUtil.getRootCause(ex) ; 99 log_.error("Error: ", ex) ; 100 } finally { 101 hserviceContainer_.closeAllSessions() ; 102 long end = System.currentTimeMillis() ; 103 ActionData data = new ActionData(rinfo.getPortalOwner(), 104 rinfo.getPageName(), 105 httpRequest.getMethod(), 106 end - start, 107 httpRequest.getParameterMap()) ; 108 scontainer.getMonitor().log(data) ; 109 if(scontainer != null)scontainer.endActionLifcycle() ; 110 PortalContainer.setInstance(null) ; 111 scontainer.endActionLifcycle(); 112 } 113 } 114 115 public void destroy() { } 116 } 117 | Popular Tags |