java - 如何控制 UrlPathHelper#getOriginatingRequestUri

标签 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;
}

现在, 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/

相关文章:

java - 如何编写特定格式的json文件?

java - CardLayout 不显示下一张卡

java - 如何在运行时更改日志级别而不重新启动 Spring Boot 应用程序

java - Spring Boot + Angular JS JBoss 部署

java - Java EE 中基于角色的菜单

java - Spring 3 @NumberFormat 不适用于表单 :input Tag

Java 没有自动装箱 int 的 compareTo 方法?

java - 在应用程序开始时获取 HttpSessionEventPublisher 异常

java - Spring Boot 端点中的异常处理

java - 从 freemarker 列表中获取最后一条记录