强制 spring data rest 使用 https 方案

epa*_*van 6 java spring spring-data-rest

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

这反过来会导致错误的 hrefs:http而不是https方案。

例子:

{
  "_links" : {
    "profile" : {
      "href" : "http://my.host/api/profile"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

epa*_*van 6

在挖掘源代码后,我发现所有链接创建都源于这一点,似乎不可能以“标准”方式配置强制使用 https 方案。

所以,我创建了一个过滤器,取代http://https://在请求URL和问题也没有了。这是片段:

    @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);
    }
Run Code Online (Sandbox Code Playgroud)