1 package com.atlassian.plugin.servlet.filter;
2
3 import java.io.IOException;
4
5 import javax.servlet.Filter;
6 import javax.servlet.FilterChain;
7 import javax.servlet.FilterConfig;
8 import javax.servlet.ServletException;
9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.http.HttpServletRequest;
12
13 import com.atlassian.plugin.servlet.PluginHttpRequestWrapper;
14 import com.atlassian.plugin.servlet.descriptors.ServletFilterModuleDescriptor;
15 import com.atlassian.plugin.servlet.util.ClassLoaderStack;
16
17
18
19
20
21
22
23
24
25
26
27 public class DelegatingPluginFilter implements Filter
28 {
29 private final ServletFilterModuleDescriptor descriptor;
30 private final Filter filter;
31
32 public DelegatingPluginFilter(ServletFilterModuleDescriptor descriptor)
33 {
34 this.descriptor = descriptor;
35 this.filter = descriptor.getModule();
36 }
37
38 public void init(FilterConfig filterConfig) throws ServletException
39 {
40 ClassLoaderStack.push(descriptor.getPlugin().getClassLoader());
41 try
42 {
43 filter.init(filterConfig);
44 }
45 finally
46 {
47 ClassLoaderStack.pop();
48 }
49 }
50
51 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
52 throws IOException, ServletException
53 {
54 ClassLoaderStack.push(descriptor.getPlugin().getClassLoader());
55 try
56 {
57 filter.doFilter(new PluginHttpRequestWrapper((HttpServletRequest) request, descriptor), response, chain);
58 }
59 finally
60 {
61 ClassLoaderStack.pop();
62 }
63 }
64
65 public void destroy()
66 {
67 ClassLoaderStack.push(descriptor.getPlugin().getClassLoader());
68 try
69 {
70 filter.destroy();
71 }
72 finally
73 {
74 ClassLoaderStack.pop();
75 }
76 }
77 }