我正在使用一个使用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
。
击>
修改
我的误解是{{1}}在重定向之前返回路径。实际上它没有。它返回正确的“/ mybasepath /”。我的错误是由代码中的另一个点引起的。
答案 0 :(得分:1)
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")