KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > webapp > acegi > CustomContextHolderAwareRequestWrapper


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package com.blandware.atleap.webapp.acegi;
17
18 import org.acegisecurity.wrapper.SecurityContextHolderAwareRequestWrapper;
19
20 import javax.servlet.http.Cookie JavaDoc;
21 import javax.servlet.http.HttpServletRequest JavaDoc;
22 import javax.servlet.http.HttpSession JavaDoc;
23 import java.text.SimpleDateFormat JavaDoc;
24 import java.util.*;
25 import java.security.Principal JavaDoc;
26
27 import com.blandware.atleap.webapp.util.core.FastHttpDateFormat;
28 import com.blandware.atleap.webapp.util.core.Enumerator;
29
30 /**
31  * <p>This class provides request parameters, headers, cookies from original requrest or saved request.</p>
32  * <p><a HREF="CustomContextHolderAwareRequestWrapper.java.htm"><i>View Source</i></a></p>
33  *
34  * @author Andrey Grebnev <a HREF="mailto:andrey.grebnev@blandware.com">&lt;andrey.grebnev@blandware.com&gt;</a>
35  * @version $Revision: 1.6 $ $Date: 2006/03/09 16:46:03 $
36  */

37 public class CustomContextHolderAwareRequestWrapper extends SecurityContextHolderAwareRequestWrapper {
38
39     protected SavedRequest savedRequest = null;
40
41     protected static final TimeZone GMT_ZONE = TimeZone.getTimeZone("GMT");
42
43     /**
44      * The default Locale if none are specified.
45      */

46     protected static Locale defaultLocale = Locale.getDefault();
47
48     /**
49      * The set of SimpleDateFormat formats to use in getDateHeader().
50      *
51      * Notice that because SimpleDateFormat is not thread-safe, we can't
52      * declare formats[] as a static variable.
53      */

54     protected SimpleDateFormat JavaDoc formats[] = new SimpleDateFormat JavaDoc[3];
55
56     //~ Constructors ===========================================================
57
public CustomContextHolderAwareRequestWrapper(HttpServletRequest JavaDoc request) {
58         super(request);
59
60         HttpSession JavaDoc session = request.getSession(false);
61         if (session == null)
62             return;
63
64         SavedRequest saved = (SavedRequest)session.getAttribute(CustomExceptionTranslationFilter.SAVED_REQUEST_SESSION_ATTRIBUTE);
65         if (saved == null)
66             return;
67
68         String JavaDoc requestURI = saved.getRequestURI();
69         if (requestURI == null)
70             return;
71
72         if (requestURI.equals(request.getRequestURI())) {
73             savedRequest = saved;
74             session.removeAttribute(CustomExceptionTranslationFilter.SAVED_REQUEST_SESSION_ATTRIBUTE);
75
76             formats[0] = new SimpleDateFormat JavaDoc("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US);
77             formats[1] = new SimpleDateFormat JavaDoc("EEEEEE, dd-MMM-yy HH:mm:ss zzz", Locale.US);
78             formats[2] = new SimpleDateFormat JavaDoc("EEE MMMM d HH:mm:ss yyyy", Locale.US);
79
80             formats[0].setTimeZone(GMT_ZONE);
81             formats[1].setTimeZone(GMT_ZONE);
82             formats[2].setTimeZone(GMT_ZONE);
83         }
84     }
85
86     /**
87      * The default behavior of this method is to return getMethod()
88      * on the wrapped request object.
89      */

90     public String JavaDoc getMethod() {
91         if (savedRequest == null) {
92             return super.getMethod();
93         } else {
94             return savedRequest.getMethod();
95         }
96     }
97
98     /**
99      * The default behavior of this method is to return getHeader(String name)
100      * on the wrapped request object.
101      */

102     public String JavaDoc getHeader(String JavaDoc name) {
103         if (savedRequest == null) {
104             return super.getHeader(name);
105         } else {
106             String JavaDoc header = null;
107             Iterator iterator = savedRequest.getHeaderValues(name);
108             while (iterator.hasNext()) {
109                 header = (String JavaDoc) iterator.next();
110                 break;
111             }
112             return header;
113         }
114     }
115
116     /**
117      * The default behavior of this method is to return getIntHeader(String name)
118      * on the wrapped request object.
119      */

120
121     public int getIntHeader(String JavaDoc name) {
122         if (savedRequest == null) {
123             return super.getIntHeader(name);
124         } else {
125             String JavaDoc value = getHeader(name);
126             if (value == null) {
127                 return (-1);
128             } else {
129                 return (Integer.parseInt(value));
130             }
131         }
132     }
133
134     /**
135      * The default behavior of this method is to return getDateHeader(String name)
136      * on the wrapped request object.
137      */

138     public long getDateHeader(String JavaDoc name) {
139         if (savedRequest == null) {
140             return super.getDateHeader(name);
141         } else {
142             String JavaDoc value = getHeader(name);
143             if (value == null)
144                 return (-1L);
145
146             // Attempt to convert the date header in a variety of formats
147
long result = FastHttpDateFormat.parseDate(value, formats);
148             if (result != (-1L)) {
149                 return result;
150             }
151             throw new IllegalArgumentException JavaDoc(value);
152         }
153     }
154
155     /**
156      * The default behavior of this method is to return getHeaderNames()
157      * on the wrapped request object.
158      */

159
160     public Enumeration getHeaderNames() {
161         if (savedRequest == null) {
162             return super.getHeaderNames();
163         } else {
164             return new Enumerator(savedRequest.getHeaderNames());
165         }
166     }
167
168
169     /**
170      * The default behavior of this method is to return getHeaders(String name)
171      * on the wrapped request object.
172      */

173     public Enumeration getHeaders(String JavaDoc name) {
174         if (savedRequest == null) {
175             return super.getHeaders(name);
176         } else {
177             return new Enumerator(savedRequest.getHeaderValues(name));
178         }
179     }
180
181     /**
182      * The default behavior of this method is to return getCookies()
183      * on the wrapped request object.
184      */

185     public Cookie JavaDoc[] getCookies() {
186         if (savedRequest == null) {
187             return super.getCookies();
188         } else {
189             List cookies = savedRequest.getCookies();
190             return (Cookie JavaDoc[])cookies.toArray(new Cookie JavaDoc[cookies.size()]);
191         }
192     }
193
194     /**
195      * The default behavior of this method is to return getParameterValues(String name)
196      * on the wrapped request object.
197      */

198     public String JavaDoc[] getParameterValues(String JavaDoc name) {
199         if (savedRequest == null) {
200             return super.getParameterValues(name);
201         } else {
202             return savedRequest.getParameterValues(name);
203         }
204     }
205
206     /**
207      * The default behavior of this method is to return getParameterNames()
208      * on the wrapped request object.
209      */

210
211     public Enumeration getParameterNames() {
212         if (savedRequest == null) {
213             return super.getParameterNames();
214         } else {
215             return new Enumerator(savedRequest.getParameterNames());
216         }
217     }
218
219     /**
220      * The default behavior of this method is to return getParameterMap()
221      * on the wrapped request object.
222      */

223     public Map getParameterMap() {
224         if (savedRequest == null) {
225             return super.getParameterMap();
226         } else {
227             return savedRequest.getParameterMap();
228         }
229     }
230
231     /**
232      * The default behavior of this method is to return getParameter(String name)
233      * on the wrapped request object.
234      */

235
236     public String JavaDoc getParameter(String JavaDoc name) {
237 /*
238         if (savedRequest == null) {
239             return super.getParameter(name);
240         } else {
241             String value = null;
242             String[] values = savedRequest.getParameterValues(name);
243             if (values == null)
244                 return null;
245             for (int i = 0; i < values.length; i++) {
246                 value = values[i];
247                 break;
248             }
249             return value;
250         }
251 */

252         //we do not get value from super.getParameter because there is a bug in Jetty servlet-container
253
String JavaDoc value = null;
254         String JavaDoc[] values = null;
255         if (savedRequest == null) {
256             values = super.getParameterValues(name);
257         } else {
258             values = savedRequest.getParameterValues(name);
259         }
260
261         if (values == null)
262             return null;
263         for (int i = 0; i < values.length; i++) {
264             value = values[i];
265             break;
266         }
267         return value;
268
269     }
270
271
272     /**
273      * The default behavior of this method is to return getLocales()
274      * on the wrapped request object.
275      */

276
277     public Enumeration getLocales() {
278         if (savedRequest == null) {
279             return super.getLocales();
280         } else {
281             Iterator iterator = savedRequest.getLocales();
282             if (iterator.hasNext()) {
283                 return new Enumerator(iterator);
284             } else {
285                 ArrayList results = new ArrayList();
286                 results.add(defaultLocale);
287                 return new Enumerator(results.iterator());
288             }
289         }
290     }
291
292     /**
293      * The default behavior of this method is to return getLocale()
294      * on the wrapped request object.
295      */

296
297     public Locale getLocale() {
298         if (savedRequest == null) {
299             return super.getLocale();
300         } else {
301             Locale locale = null;
302             Iterator iterator = savedRequest.getLocales();
303             while (iterator.hasNext()) {
304                 locale = (Locale) iterator.next();
305                 break;
306             }
307             if (locale == null) {
308                 return defaultLocale;
309             } else {
310                 return locale;
311             }
312         }
313     }
314
315     /**
316      * Returns the <code>Authentication</code> (which is a subclass of
317      * <code>Principal</code>), or <code>null</code> if unavailable.
318      *
319      * <p>We override this method in order to workaround the problem in Sun Java System Application Server 8.1 PE</p>
320      * <p>This approach is tottaly incorrect, but as noone use this method it is safe</p>
321      *
322      * @return the <code>Authentication</code>, or <code>null</code>
323      */

324     public Principal JavaDoc getUserPrincipal() {
325         //TODO remove this method at all when SJSAS bug will be fixed
326
return null;
327     }
328
329 }
330
Popular Tags