KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > exoplatform > portal > filter > PrivateRequestFilter


1 /***************************************************************************
2  * Copyright 2001-2003 The eXo Platform SARL All rights reserved. *
3  * Please look at license.txt in info directory for more license detail. *
4  **************************************************************************/

5 package org.exoplatform.portal.filter;
6
7 import java.io.IOException JavaDoc;
8 import javax.servlet.*;
9 import javax.servlet.http.HttpServletRequest JavaDoc;
10 import javax.servlet.http.HttpServletResponse JavaDoc;
11 import javax.servlet.http.HttpSession JavaDoc;
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 /**
25  * Fri, May 30, 2003 @
26  * @author: Tuan Nguyen
27  * @email: tuan08@users.sourceforge.net
28  * @version: $Id: PrivateRequestFilter.java,v 1.25 2004/11/03 01:19:46 tuan08 Exp $
29  */

30 public class PrivateRequestFilter implements Filter {
31         
32   private Log log_ ;
33   private String JavaDoc 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 JavaDoc request, ServletResponse JavaDoc response,
51                        FilterChain chain) throws IOException JavaDoc, ServletException {
52     long start = System.currentTimeMillis() ;
53     PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ;
54     PortalContainer.setInstance(pcontainer) ;
55     HttpServletRequest JavaDoc httpRequest = (HttpServletRequest JavaDoc) request ;
56     HttpSession JavaDoc 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 JavaDoc 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 JavaDoc httpResponse = (HttpServletResponse JavaDoc) 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 JavaDoc 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