我正在使用一个使用 Spring MVC 3.1 的旧网站,并且我有一个 HandlerInterceptor拦截对 www.mysite.com/
的任何请求并将重定向发送到 www.mysite.com/mybasepath/
。
public class MyRedirectInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String myContextPath = "www.mysite.com";
if (isRequestToRootUrl(request)) {
String redirectUrl = myContextPath + "/mybasepath/";
response.sendRedirect(redirectUrl);
return false;
}
return true;
}
现在, Controller 处理 www.mysite.com/mybasepath/
的请求有一个内部使用Spring的UrlPathHelper#getOriginatingRequestUri的代码.
<罢工>
问题是这个 Controller 假设 UrlPathHelper#getOriginatingRequestUri
的结果格式必须为 "/mybasepath/*"
。但因为我有"/"
重定向至"/mybasepath/"
通过使用response.sendRedirect(...)
, UrlPathHelper#getOriginatingRequestUri
的结果将只是 "/"
,这会导致错误。
所以我正在寻找一种修改 MyRedirectInterceptor
的方法这样的结果是 UrlPathHelper#getOriginatingRequestUri
重定向后为"/mybasepath/"
相反。
罢工>
编辑
这是我的误解,UrlPathHelper#getOriginatingRequestUri
返回重定向前的路径。事实上并非如此。它返回正确的“/mybasepath/”。我的错误是由代码中的另一点引起的。
最佳答案
getRequestUri 是这样实现的。
187 public String More ...getRequestUri(HttpServletRequest request) {
188 String uri = (String) request.getAttribute(WebUtils.INCLUDE_REQUEST_URI_ATTRIBUTE);
189 if (uri == null) {
190 uri = request.getRequestURI();
191 }
192 return decodeAndCleanUriString(request, uri);
193 }
我的以下帮助
request.setAttribute(WebUtils.INCLUDE_REQUEST_URI_ATTRIBUTE, "my value")
关于java - 如何控制 UrlPathHelper#getOriginatingRequestUri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24692421/