如何在 Ibm Bluemix 中使用具有默认 java Build Pack 的 Tomcat 服务器强制执行 Https 连接?

How do I enforce Https Connection in Ibm Bluemix using Tomcat Server with Default java Build Pack?

我有一个 Spring Mvc 应用程序,它使用 ibm bluemix 上的 hibernate 托管,域在 go daddy 中注册,使用 tomcat 服务器,使用 java_buildpack 由 blue mix 提供 tomcat.Currently 我已经在 go daddy 中购买了一个 ssl 证书并在 blue 中注册 mix.My 应用程序现在可以在 http 和 https.But 上运行 现在我需要只执行 https 连接到我的应用程序。我实现了 Spring 安全。我使用安全配置来强制执行 https,并使用下面的代码进行 https 重定向。

requiresChannel().anyRequest().requiresSecure()

但是它在浏览器中给我以下错误

Too many redirects occurred trying to open “https://website-name”. This might occur if you open a page that is redirected to open another page which then is redirected to open the original page.

现在我跟踪了几个网络链接以便在他们告诉我添加几个参数的地方强制执行 https 我在我的应用程序的 blue mix 运行时环境变量中添加了这些参数。

server.tomcat.internal-代理:.*

我也试过添加

server.tomcat.remote_ip_header:x-forwarded-for

server.tomcat.protocol_header:x-forwarded-proto

应用程序的流程是首先去爸爸查找然后它去蓝色混合应用程序我怎么能只启用 https

但我仍然得到同样的错误。 伙计们,你能帮我解决这个问题吗?

我添加了自定义过滤器

@Component
public class CustomFilter implements Filter {
    private static final Logger logger = Logger.getLogger(CartController.class);

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request1, ServletResponse response1, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) request1;
        HttpServletResponse response = (HttpServletResponse) response1;
        if (!request.isSecure()) {
            logger.info("Not secure");
            // generate full URL to https
            StringBuilder newUrl = new StringBuilder("https://");
            newUrl.append(request.getServerName());
            if (request.getRequestURI() != null) {
                newUrl.append(request.getRequestURI());
            }
            if (request.getQueryString() != null) {
                newUrl.append("?").append(request.getQueryString());
            }

            response.sendRedirect(newUrl.toString());
        } else {
            // already a secure connection, no redirect to https required.
            logger.info("Else");
            if (chain != null) {
                logger.info("Chain Null");
                chain.doFilter(request, response);
            }
        }

    }


}

我建议两种选择: 1. 过去我手动实现了一个过滤器,如果收到非 http 请求则重定向到 https。我没有按照您尝试的方式使用 spring 安全性。 2. Post 在 spring 表格上向 spring 安全负责人 Rob Winch 提问,并交叉 link 这个问题,以便 Bluemix 平台上的人可以看到他的回复.

我最初的想法是手动过滤器是可行的方法,但我真的很想知道 Rob 和团队是否在 CF 平台上遇到过这种情况。