1 16 17 package com.google.inject.servlet; 18 19 import java.io.IOException ; 20 21 import javax.servlet.Filter ; 22 import javax.servlet.FilterChain ; 23 import javax.servlet.FilterConfig ; 24 import javax.servlet.ServletException ; 25 import javax.servlet.ServletRequest ; 26 import javax.servlet.ServletResponse ; 27 import javax.servlet.http.HttpServletRequest ; 28 import javax.servlet.http.HttpServletResponse ; 29 30 35 public class GuiceFilter implements Filter { 36 37 static final ThreadLocal <Context> localContext = new ThreadLocal <Context>(); 38 39 public void doFilter(ServletRequest servletRequest, 40 ServletResponse servletResponse, FilterChain filterChain) 41 throws IOException , ServletException { 42 Context previous = localContext.get(); 43 try { 44 localContext.set(new Context((HttpServletRequest ) servletRequest, 45 (HttpServletResponse ) servletResponse)); 46 filterChain.doFilter(servletRequest, servletResponse); 47 } finally { 48 localContext.set(previous); 49 } 50 } 51 52 static HttpServletRequest getRequest() { 53 return getContext().getRequest(); 54 } 55 56 static HttpServletResponse getResponse() { 57 return getContext().getResponse(); 58 } 59 60 static Context getContext() { 61 Context context = localContext.get(); 62 if (context == null) { 63 throw new RuntimeException ("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 request; 72 final HttpServletResponse response; 73 74 Context(HttpServletRequest request, HttpServletResponse response) { 75 this.request = request; 76 this.response = response; 77 } 78 79 HttpServletRequest getRequest() { 80 return request; 81 } 82 83 HttpServletResponse getResponse() { 84 return response; 85 } 86 } 87 88 public void init(FilterConfig filterConfig) throws ServletException {} 89 90 public void destroy() {} 91 } 92 | Popular Tags |