我正在使用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")

07-28 14:17