1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.blossom.support;
35
36 import javax.servlet.http.HttpServletRequest;
37
38 import org.apache.commons.lang.StringUtils;
39 import org.springframework.web.util.WebUtils;
40
41
42
43
44
45
46
47 public class ForwardRequestWrapper extends SpecialAttributeRequestWrapper {
48
49 private final String requestUri;
50 private final String originalRequestUri;
51 private final String contextPath;
52 private final String originalContextPath;
53 private final String servletPath;
54 private final String originalServletPath;
55 private final String pathInfo;
56 private final String originalPathInfo;
57
58 public ForwardRequestWrapper(HttpServletRequest request, String requestUri, String contextPath, String servletPath, String pathInfo) {
59 super(request);
60 this.requestUri = requestUri;
61 this.originalRequestUri = request.getRequestURI();
62 this.servletPath = servletPath;
63 this.originalServletPath = request.getServletPath();
64 this.contextPath = contextPath;
65 this.originalContextPath = request.getContextPath();
66 this.pathInfo = pathInfo;
67 this.originalPathInfo = request.getPathInfo();
68 if (request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE) == null) {
69 setSpecialAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, request.getRequestURI());
70 setSpecialAttribute(WebUtils.FORWARD_CONTEXT_PATH_ATTRIBUTE, request.getContextPath());
71 setSpecialAttribute(WebUtils.FORWARD_SERVLET_PATH_ATTRIBUTE, request.getServletPath());
72 setSpecialAttribute(WebUtils.FORWARD_PATH_INFO_ATTRIBUTE, request.getPathInfo());
73 setSpecialAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE, request.getQueryString());
74 }
75 }
76
77 @Override
78 public String getRequestURI() {
79 String currentRequestUri = super.getRequestURI();
80 if (!StringUtils.equals(currentRequestUri, originalRequestUri))
81 return currentRequestUri;
82 if (!StringUtils.equals(super.getServletPath(), originalServletPath))
83 return currentRequestUri;
84 if (!StringUtils.equals(super.getPathInfo(), originalPathInfo))
85 return currentRequestUri;
86 if (!StringUtils.equals(super.getContextPath(), originalContextPath))
87 return currentRequestUri;
88 return requestUri;
89 }
90
91 @Override
92 public String getContextPath() {
93 String currentContextPath = super.getContextPath();
94 if (!StringUtils.equals(super.getRequestURI(), originalRequestUri))
95 return currentContextPath;
96 if (!StringUtils.equals(super.getServletPath(), originalServletPath))
97 return currentContextPath;
98 if (!StringUtils.equals(super.getPathInfo(), originalPathInfo))
99 return currentContextPath;
100 if (!StringUtils.equals(currentContextPath, originalContextPath))
101 return currentContextPath;
102 return contextPath;
103 }
104
105 @Override
106 public String getServletPath() {
107 String currentServletPath = super.getServletPath();
108 if (!StringUtils.equals(super.getRequestURI(), originalRequestUri))
109 return currentServletPath;
110 if (!StringUtils.equals(currentServletPath, originalServletPath))
111 return currentServletPath;
112 if (!StringUtils.equals(super.getPathInfo(), originalPathInfo))
113 return currentServletPath;
114 if (!StringUtils.equals(super.getContextPath(), originalContextPath))
115 return currentServletPath;
116 return servletPath;
117 }
118
119 @Override
120 public String getPathInfo() {
121 String superPathInfo = super.getPathInfo();
122 if (!StringUtils.equals(super.getRequestURI(), originalRequestUri))
123 return superPathInfo;
124 if (!StringUtils.equals(super.getServletPath(), originalServletPath))
125 return superPathInfo;
126 if (!StringUtils.equals(superPathInfo, originalPathInfo))
127 return superPathInfo;
128 if (!StringUtils.equals(super.getContextPath(), originalContextPath))
129 return superPathInfo;
130 return pathInfo;
131 }
132 }