KickJava   Java API By Example, From Geeks To Geeks.

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


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.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 /*
27  * Fri, May 30, 2003 @
28  * @author: Tuan Nguyen
29  * @email: tuan08@users.sourceforge.net
30  * @version: $Id: PublicRequestFilter.java,v 1.28 2004/11/03 01:19:46 tuan08 Exp $
31  */

32 public class PublicRequestFilter implements Filter {
33   private Log log_ ;
34   private PortalACL portalACL_ ;
35   private String JavaDoc 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 JavaDoc request, ServletResponse JavaDoc response,
57                        FilterChain chain) throws IOException JavaDoc, ServletException {
58     long start = System.currentTimeMillis() ;
59     PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ;
60     PortalContainer.setInstance(pcontainer) ;
61     HttpServletRequest JavaDoc httpRequest = (HttpServletRequest JavaDoc) request ;
62     HttpSession JavaDoc 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       //if user login , invalidate the session to logout when user move to public link
74
String JavaDoc 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 JavaDoc httpResponse = (HttpServletResponse JavaDoc) 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 JavaDoc 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