KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > google > inject > servlet > GuiceFilter


1 /**
2  * Copyright (C) 2006 Google Inc.
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
17 package com.google.inject.servlet;
18
19 import java.io.IOException JavaDoc;
20
21 import javax.servlet.Filter JavaDoc;
22 import javax.servlet.FilterChain JavaDoc;
23 import javax.servlet.FilterConfig JavaDoc;
24 import javax.servlet.ServletException JavaDoc;
25 import javax.servlet.ServletRequest JavaDoc;
26 import javax.servlet.ServletResponse JavaDoc;
27 import javax.servlet.http.HttpServletRequest JavaDoc;
28 import javax.servlet.http.HttpServletResponse JavaDoc;
29
30 /**
31  * Apply this filter to all requests where you plan to use servlet scopes.
32  *
33  * @author crazybob@google.com (Bob Lee)
34  */

35 public class GuiceFilter implements Filter JavaDoc {
36
37   static final ThreadLocal JavaDoc<Context> localContext = new ThreadLocal JavaDoc<Context>();
38
39   public void doFilter(ServletRequest JavaDoc servletRequest,
40       ServletResponse JavaDoc servletResponse, FilterChain JavaDoc filterChain)
41       throws IOException JavaDoc, ServletException JavaDoc {
42     Context previous = localContext.get();
43     try {
44       localContext.set(new Context((HttpServletRequest JavaDoc) servletRequest,
45           (HttpServletResponse JavaDoc) servletResponse));
46       filterChain.doFilter(servletRequest, servletResponse);
47     } finally {
48       localContext.set(previous);
49     }
50   }
51
52   static HttpServletRequest JavaDoc getRequest() {
53     return getContext().getRequest();
54   }
55
56   static HttpServletResponse JavaDoc getResponse() {
57     return getContext().getResponse();
58   }
59
60   static Context getContext() {
61     Context context = localContext.get();
62     if (context == null) {
63       throw new RuntimeException JavaDoc("Please apply " + GuiceFilter.class.getName()
64           + " to any request which uses servlet scopes.");
65     }
66     return context;
67   }
68
69   static class Context {
70
71     final HttpServletRequest JavaDoc request;
72     final HttpServletResponse JavaDoc response;
73
74     Context(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
75       this.request = request;
76       this.response = response;
77     }
78
79     HttpServletRequest JavaDoc getRequest() {
80       return request;
81     }
82
83     HttpServletResponse JavaDoc getResponse() {
84       return response;
85     }
86   }
87
88   public void init(FilterConfig JavaDoc filterConfig) throws ServletException JavaDoc {}
89
90   public void destroy() {}
91 }
92
Popular Tags