File Source: preprocessingfilter.java
/*
P/P * Method: net.sourceforge.pebble.web.filter.PreProcessingFilter__static_init
*
* Postconditions:
* init'ed(log)
*/
1 /*
2 * Copyright (c) 2003-2006, Simon Brown
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * - Neither the name of Pebble nor the names of its contributors may
17 * be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32 package net.sourceforge.pebble.web.filter;
33
34 import net.sourceforge.pebble.Configuration;
35 import net.sourceforge.pebble.Constants;
36 import net.sourceforge.pebble.PebbleContext;
37 import net.sourceforge.pebble.security.PebbleUserDetails;
38 import net.sourceforge.pebble.util.HttpsURLRewriter;
39 import net.sourceforge.pebble.util.SecurityUtils;
40 import net.sourceforge.pebble.util.CookieUtils;
41 import net.sourceforge.pebble.util.UrlRewriter;
42 import net.sourceforge.pebble.util.Utilities;
43 import net.sourceforge.pebble.api.decorator.ContentDecoratorContext;
44 import net.sourceforge.pebble.comparator.BlogEntryComparator;
45 import net.sourceforge.pebble.comparator.BlogByLastModifiedDateComparator;
46 import net.sourceforge.pebble.decorator.ContentDecoratorChain;
47 import net.sourceforge.pebble.domain.*;
48 import org.apache.commons.logging.Log;
49 import org.apache.commons.logging.LogFactory;
50
51 import javax.servlet.*;
/*
P/P * Method: void net.sourceforge.pebble.web.filter.PreProcessingFilter()
*/
52 import javax.servlet.http.HttpServletRequest;
53 import javax.servlet.http.Cookie;
54 import javax.servlet.http.HttpServletResponse;
55 import javax.servlet.jsp.jstl.core.Config;
56 import java.io.IOException;
57 import java.net.URLDecoder;
58 import java.util.Collections;
59 import java.util.List;
60 import java.util.Locale;
61
62 /**
63 * A filter respsonsible for setting up common objects.
64 *
65 * @author Simon Brown
66 */
67 public class PreProcessingFilter implements Filter {
68
69 /** the log used by this class */
70 private static Log log = LogFactory.getLog(PreProcessingFilter.class);
71
72 /** the config of this filter */
73 private FilterConfig filterConfig;
74
75 /**
76 * Initialises this instance.
77 *
78 * @param config a FilterConfig instance
79 */
/*
P/P * Method: void init(FilterConfig)
*
* Postconditions:
* this.filterConfig == config
* init'ed(this.filterConfig)
*/
80 public void init(FilterConfig config) {
81 this.filterConfig = config;
82 }
83
84 /**
85 * Called when this filter is taken out of service.
86 */
/*
P/P * Method: void destroy()
*/
87 public void destroy() {
88 }
89
90 /**
91 * Contains the processing associated with this filter.
92 */
93 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
94 throws ServletException, IOException {
95
96 HttpServletRequest httpRequest = (HttpServletRequest)request;
97
98 // log.info("Session is " + httpRequest.getSession().getId());
99 // HttpServletResponse httpResponse = (HttpServletResponse)response;
100 // Cookie cookie = CookieUtils.getCookie(httpRequest.getCookies(), "JSESSIONID");
101 // if (cookie != null) {
102 // log.info("Domain is " + cookie.getDomain());
103 // log.info("Path is " + cookie.getPath());
104 // cookie.setDomain(".example.com");
105 // cookie.setPath("/");
106 // httpResponse.addCookie(cookie);
107 // }
108
109 String externalUri = (String)request.getAttribute(Constants.EXTERNAL_URI);
110 if (externalUri.startsWith("/common/") ||
111 externalUri.startsWith("/dwr/") ||
112 externalUri.startsWith("/FCKeditor/") ||
113 externalUri.startsWith("/scripts/") ||
114 externalUri.startsWith("/themes/") ||
115 externalUri.equals("/pebble.css") ||
116 externalUri.equals("/jckconfig_pebble.js") ||
117 externalUri.equals("/favicon.ico")
118 ) {
119 // do nothing
120 } else {
121 AbstractBlog blog = (AbstractBlog)request.getAttribute(Constants.BLOG_KEY);
122 if (blog instanceof Blog) {
123 Blog b = (Blog)blog;
124 ContentDecoratorContext context = new ContentDecoratorContext();
125 context.setView(ContentDecoratorContext.SUMMARY_VIEW);
126 context.setMedia(ContentDecoratorContext.HTML_PAGE);
127
128 List blogEntries = b.getRecentPublishedBlogEntries();
129 ContentDecoratorChain.decorate(context, blogEntries);
130 Collections.sort(blogEntries, new BlogEntryComparator());
131 httpRequest.setAttribute(Constants.RECENT_BLOG_ENTRIES, blogEntries);
132
133 List<Response> recentApprovedResponses = b.getRecentApprovedResponses();
134 for (Response r : recentApprovedResponses) {
135 if (r instanceof Comment) {
136 b.getContentDecoratorChain().decorate(context, (Comment)r);
137 } else if (r instanceof TrackBack){
138 b.getContentDecoratorChain().decorate(context, (TrackBack)r);
139 }
140 }
141 httpRequest.setAttribute(Constants.RECENT_RESPONSES, recentApprovedResponses);
142
143 httpRequest.setAttribute(Constants.CATEGORIES, b.getCategories());
144 httpRequest.setAttribute(Constants.TAGS, b.getTags());
145 httpRequest.setAttribute(Constants.PLUGIN_PROPERTIES, b.getPluginProperties());
146 httpRequest.setAttribute(Constants.ARCHIVES, b.getArchives());
147 httpRequest.setAttribute(Constants.BLOG_TYPE, "singleblog");
148 } else {
149 httpRequest.setAttribute(Constants.BLOG_TYPE, "multiblog");
150 }
151
152 if (PebbleContext.getInstance().getConfiguration().isMultiBlog()) {
153 httpRequest.setAttribute(Constants.MULTI_BLOG_KEY, BlogManager.getInstance().getMultiBlog());
154 httpRequest.setAttribute(Constants.MULTI_BLOG_URL, Utilities.calcBaseUrl(request.getScheme(), BlogManager.getInstance().getMultiBlog().getUrl()));
155
156 List blogs = BlogManager.getInstance().getPublicBlogs();
157 Collections.sort(blogs, new BlogByLastModifiedDateComparator());
158 httpRequest.setAttribute(Constants.BLOGS, blogs);
159 }
160
161 // change the character encoding so that we can successfully get
162 // international characters from the request when HTML forms are submitted
163 // ... but only if the browser doesn't send the character encoding back
164 if (request.getCharacterEncoding() == null) {
165 ((Object) request).setCharacterEncoding(blog.getCharacterEncoding());
166 }
167
168 PebbleUserDetails user = SecurityUtils.getUserDetails();
169 if (user != null) {
170 httpRequest.setAttribute(Constants.AUTHENTICATED_USER, user);
171 }
172
173 Config.set(request, Config.FMT_LOCALE, blog.getLocale());
174 Config.set(request, Config.FMT_FALLBACK_LOCALE, Locale.ENGLISH);
175 }
176
177 try {
178 Configuration configuration = PebbleContext.getInstance().getConfiguration();
179 if(configuration.getSecureUrl().startsWith("https")) {
180 UrlRewriter.useThisRewriter(new HttpsURLRewriter(request.getScheme()));
181 }
182
183 chain.doFilter(request, response);
184 } finally {
185 UrlRewriter.clear();
186 }
187 }
188 }
SofCheck Inspector Build Version : 2.22510
| preprocessingfilter.java |
2010-Jul-19 18:33:16 |
| preprocessingfilter.class |
2010-Jul-19 20:23:38 |