如何将控制器放在UrlPathHelper#getOriginatingRequestUri上

时间:2014-07-11 07:36:57

标签: java spring spring-mvc redirect

我正在使用一个使用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 /”。我的错误是由代码中的另一个点引起的。

1 个答案:

答案 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")