1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.wrapper;
17
18 import org.acegisecurity.util.PortResolver;
19 import org.acegisecurity.util.PortResolverImpl;
20
21 import org.springframework.util.Assert;
22 import org.springframework.util.ReflectionUtils;
23
24 import java.io.IOException;
25
26 import java.lang.reflect.Constructor;
27
28 import javax.servlet.Filter;
29 import javax.servlet.FilterChain;
30 import javax.servlet.FilterConfig;
31 import javax.servlet.ServletException;
32 import javax.servlet.ServletRequest;
33 import javax.servlet.ServletResponse;
34 import javax.servlet.http.HttpServletRequest;
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 public class SecurityContextHolderAwareRequestFilter implements Filter {
51
52
53 private Class wrapperClass = SavedRequestAwareWrapper.class;
54 private Constructor constructor;
55 private PortResolver portResolver = new PortResolverImpl();
56
57
58
59 public void destroy() {}
60
61 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
62 throws IOException, ServletException {
63 HttpServletRequest request = (HttpServletRequest) servletRequest;
64
65 if (!wrapperClass.isAssignableFrom(request.getClass())) {
66 if (constructor == null) {
67 try {
68 constructor = wrapperClass.getConstructor(new Class[] {HttpServletRequest.class, PortResolver.class});
69 } catch (Exception ex) {
70 ReflectionUtils.handleReflectionException(ex);
71 }
72 }
73
74 try {
75 request = (HttpServletRequest) constructor.newInstance(new Object[] {request, portResolver});
76 } catch (Exception ex) {
77 ReflectionUtils.handleReflectionException(ex);
78 }
79 }
80
81 filterChain.doFilter(request, servletResponse);
82 }
83
84 public void init(FilterConfig filterConfig) throws ServletException {}
85
86 public void setPortResolver(PortResolver portResolver) {
87 Assert.notNull(portResolver, "PortResolver required");
88 this.portResolver = portResolver;
89 }
90
91 public void setWrapperClass(Class wrapperClass) {
92 Assert.notNull(wrapperClass, "WrapperClass required");
93 Assert.isTrue(HttpServletRequest.class.isAssignableFrom(wrapperClass), "Wrapper must be a HttpServletRequest");
94 this.wrapperClass = wrapperClass;
95 }
96 }