KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > infoglue > deliver > applications > filters > PortalParameterFilter


1 /* ===============================================================================
2 *
3 * Part of the InfoGlue Content Management Platform (www.infoglue.org)
4 *
5 * ===============================================================================
6 *
7 * Copyright (C)
8 *
9 * This program is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU General Public License version 2, as published by the
11 * Free Software Foundation. See the file LICENSE.html for more information.
12 *
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
19 * Place, Suite 330 / Boston, MA 02111-1307 / USA.
20 *
21 * ===============================================================================
22 */

23 package org.infoglue.deliver.applications.filters;
24
25 import java.io.IOException JavaDoc;
26 import java.net.URLDecoder JavaDoc;
27 import java.util.ArrayList JavaDoc;
28 import java.util.List JavaDoc;
29 import java.util.StringTokenizer JavaDoc;
30
31 import javax.servlet.Filter JavaDoc;
32 import javax.servlet.FilterChain JavaDoc;
33 import javax.servlet.FilterConfig JavaDoc;
34 import javax.servlet.ServletException JavaDoc;
35 import javax.servlet.ServletRequest JavaDoc;
36 import javax.servlet.ServletResponse JavaDoc;
37 import javax.servlet.http.HttpServletRequest JavaDoc;
38 import javax.servlet.http.HttpServletResponse JavaDoc;
39
40 import org.apache.commons.logging.Log;
41 import org.apache.commons.logging.LogFactory;
42 import org.infoglue.cms.util.CmsPropertyHandler;
43
44 /**
45  * @author jand
46  *
47  */

48 public class PortalParameterFilter implements Filter JavaDoc
49 {
50     private static final Log log = LogFactory.getLog(PortalParameterFilter.class);
51
52     private static String JavaDoc FILTER_URIS_PARAMETER = "FilterURIs";
53
54     private FilterConfig JavaDoc filterConfig = null;
55     private URIMatcher uriMatcher = null;
56
57     private boolean active = true;
58
59     /* (non-Javadoc)
60      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
61      */

62     public void init(FilterConfig JavaDoc filterConfig) throws ServletException JavaDoc
63     {
64         String JavaDoc portalEnabled = CmsPropertyHandler.getEnablePortal();
65         active = ((active) && (portalEnabled != null) && portalEnabled.equalsIgnoreCase("true"));
66
67         this.filterConfig = filterConfig;
68         String JavaDoc filterURIs = filterConfig.getInitParameter(FILTER_URIS_PARAMETER);
69         uriMatcher = URIMatcher.compilePatterns(splitString(filterURIs, ","), false);
70
71         log.info("PortalParameterFilter is active: " + active);
72     }
73
74     /* (non-Javadoc)
75      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
76      */

77     
78     public void doFilter(ServletRequest JavaDoc req, ServletResponse JavaDoc resp, FilterChain JavaDoc chain) throws IOException JavaDoc, ServletException JavaDoc
79     {
80         HttpServletRequest JavaDoc httpRequest = (HttpServletRequest JavaDoc)req;
81         HttpServletResponse JavaDoc httpResponse = (HttpServletResponse JavaDoc)resp;
82
83         if (active)
84         {
85             String JavaDoc requestURI = URLDecoder.decode(getContextRelativeURI(httpRequest), "UTF-8");
86
87             if (!uriMatcher.matches(requestURI))
88             {
89                 log.debug("wrapping " + ((HttpServletRequest JavaDoc) req).getRequestURI());
90                 chain.doFilter(new PortalServletRequest((HttpServletRequest JavaDoc) req), resp);
91             }
92             else
93                 chain.doFilter(req, resp);
94         }
95         else
96         {
97             chain.doFilter(req, resp);
98         }
99     }
100
101     /* (non-Javadoc)
102      * @see javax.servlet.Filter#destroy()
103      */

104     public void destroy()
105     {
106
107     }
108
109     
110     private String JavaDoc getContextRelativeURI(HttpServletRequest JavaDoc request)
111     {
112         String JavaDoc requestURI = request.getRequestURI();
113         String JavaDoc contextPath = request.getContextPath();
114         if (contextPath != null && requestURI.length() > 0)
115         {
116             requestURI = requestURI.substring(contextPath.length(), requestURI.length());
117         }
118         
119         if (requestURI.length() == 0)
120             return "/";
121         
122         return requestURI;
123     }
124     
125     private String JavaDoc[] splitString(String JavaDoc str, String JavaDoc delimiter)
126     {
127         List JavaDoc list = new ArrayList JavaDoc();
128         StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(str, delimiter);
129         while (st.hasMoreTokens())
130         {
131             // Updated to handle portal-url:s
132
String JavaDoc t = st.nextToken();
133             if (t.startsWith("_"))
134             {
135                 break;
136             }
137             else
138             {
139                 // Not related to portal - add
140
list.add(t.trim());
141             }
142         }
143         return (String JavaDoc[]) list.toArray(new String JavaDoc[list.size()]);
144     }
145
146 }
147
Popular Tags