Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用loadbalacer在spring MVC中重定向_Spring_Spring Mvc_Filter_Url Redirection_Http Redirect - Fatal编程技术网

使用loadbalacer在spring MVC中重定向

使用loadbalacer在spring MVC中重定向,spring,spring-mvc,filter,url-redirection,http-redirect,Spring,Spring Mvc,Filter,Url Redirection,Http Redirect,我有一个spring MVC应用程序,它托管在服务器S上。客户端C的所有调用都通过loadbalancer L转到S。负载均衡器在服务器S内部使用的url是internalurl.com,客户端使用的url是xyz.com 问题是,当我在mozilla浏览器上点击一个url,比如xyz.com/admin/时,我希望它被重定向到xyz.com/admin/home.html。但是,它将重定向到internalurl.com/admin/home.html,并且由于internalurl.com是

我有一个spring MVC应用程序,它托管在服务器S上。客户端C的所有调用都通过loadbalancer L转到S。负载均衡器在服务器S内部使用的url是internalurl.com,客户端使用的url是xyz.com

问题是,当我在mozilla浏览器上点击一个url,比如xyz.com/admin/时,我希望它被重定向到xyz.com/admin/home.html。但是,它将重定向到internalurl.com/admin/home.html,并且由于internalurl.com是负载均衡器的内部,因此我在浏览器地址栏中的“internalurl.com/admin/home.html”中显示“网络访问消息:找不到网站”

对于重定向,我使用:

  public void doFilter(ServletRequest req, ServletResponse res,
                     FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    String strReferer = request.getHeader("Referer");

    String strConetextPath = request.getContextPath();

    if (strReferer != null && !strReferer.contains(strConetextPath)) {
        response.sendRedirect("/requestError.html");
    } 
    // redirect to home.html in case user tries to access /admin/
    // in case user is not already logged-in, user will be redirected to login.html
    else if (request.getRequestURI().equalsIgnoreCase("/admin/")) {
        response.sendRedirect("home.html");
    }else
        chain.doFilter(req, res);
}

提前感谢。

这根本不是SPring MVC的问题。应在代理/负载平衡器处进行处理

因为在内部服务器级别发生的任何重定向都将具有内部服务器URL,客户端/浏览器不知道该URL。因为客户端只知道Web服务器(正如您提到的XYZ.com)

这是一个典型的问题,由代理或负载平衡器使用反向代理概念来处理

例如:在Apache HTTP的情况下,我们使用ProxyPassReverse配置,它将在响应浏览器之前将所有内部服务器url头转换为指向XYZ.com。这将确保浏览器仅调用xyz.com

希望能有帮助


谢谢,JP

嗨,JP,在你发表评论后,我检查了反向代理概念,对我来说,这可能是由于loadbalancer配置。这一评论提供了信息。