强制弹簧数据休息以使用https方案

时间:2016-11-01 10:39:44

标签: java spring spring-data-rest

我在我的应用程序中使用spring-data-rest,它是从HTTP重定向到HTTPS的apache反向代理的背后

这又会导致错误的href:http而不是https计划。

示例:

{
  "_links" : {
    "profile" : {
      "href" : "http://my.host/api/profile"
    }
  }
}

我有什么方法可以配置spring.data.rest强制使用https方案吗?

3 个答案:

答案 0 :(得分:3)

在深入了解源代码后,我发现所有链接创建都来自此point,并且似乎无法在标准中配置强制使用https方案'办法。

因此,我在请求网址中创建了一个将http://替换为https://的过滤器,问题已经消失。这是片段:

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        final HttpServletRequestWrapper wrapped = new HttpServletRequestWrapper(request) {
            @Override
            public StringBuffer getRequestURL() {
                final StringBuffer originalUrl = ((HttpServletRequest) getRequest()).getRequestURL();
                final String updatedUrl = originalUrl.toString().replace("http://", "https://");
                return new StringBuffer(updatedUrl);
            }
        };
        filterChain.doFilter(wrapped, servletResponse);
    }

答案 1 :(得分:0)

实际上,Spring Data Rest使用HATEOAS,它支持来自代理请求的特殊标头,请查看以下内容:

您要查找的标题为:X-Forwarded-Proto

答案 2 :(得分:0)

我有点不确定但是。我做了以下操作,似乎链接有效。

server:
  forward-headers-strategy: NATIVE