我正在使用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;
}
现在,处理对
www.mysite.com/mybasepath/
的请求的控制器具有内部使用Spring的UrlPathHelper#getOriginatingRequestUri的代码。问题在于此控制器假定
UrlPathHelper#getOriginatingRequestUri
的结果必须为"/mybasepath/*"
形式。但是由于我已使用"/"
将"/mybasepath/"
重定向到response.sendRedirect(...)
,所以UrlPathHelper#getOriginatingRequestUri
的结果将仅为"/"
,这将导致错误。因此,我正在寻找一种修改
MyRedirectInterceptor
的方法,以使重定向后UrlPathHelper#getOriginatingRequestUri
的结果改为"/mybasepath/"
。编辑
我的误解是
UrlPathHelper#getOriginatingRequestUri
返回重定向之前的路径。其实不是。它返回正确的“ / mybasepath /”。我的错误是由代码中的另一点引起的。 最佳答案
像这样实现的getRequestUri ist。
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")