java是否在url中检测到错误的协议?

时间:2019-02-21 14:07:19

标签: java cloudflare

我正在尝试在我的某些网站上设置从http到https的重定向。

我正在用Java以编程方式执行此操作,因为我在同一个servlet容器/ Web应用程序中运行着许多网站,并且其中只有一部分连接到cloudflare,所以只有其中一部分可以使用https。 / p>

编码似乎非常简单:

String requestURLLower = req.getRequestURL().toString().toLowerCase();

if ( isCloudflareSite && requestURLLower.startsWith("http:")) {

    StringBuilder requestURL = new StringBuilder(requestURLLower);
    System.out.println("Got requrl lower " + requestURLLower + " scheme " + 
    req.getScheme() + " is secure " + req.isSecure());

    String queryString = req.getQueryString();
    if (queryString != null) {
        requestURL.append('?').append(queryString);
    }

    String link = Strings.replace(requestURL.toString(), "http:", "https:");

    System.out.println("RURLLOWEr redirecting to " + link + " from " + 
    requestURL);

    res.setStatus(301);
    res.setHeader( "Location", link);
    return;
}

运行此代码时,浏览器重定向次数过多,并显示错误消息。

我在浏览器中输入的初始URL是https本身: https://www.xxx.com.au/xxx?page=hello

在我的浏览器中输入确切的网址后,程序的输出是这样的:

Got requrl lower http://www.xxx.com.au/xxx scheme http is secure false
RURLLOWEr redirecting to https://www.xxx.com.au/xxx?page=hello from 
http://www.xxx.com.au/xxx?page=hello

从一页加载开始,此输出重复了大约20次。

我在这里是否遗漏了一些明显的东西,还是java没有检测到协议?

我唯一能想到的是它与Cloudflare提供的https有关。

1 个答案:

答案 0 :(得分:0)

Cloudflare提供的SSL位于用户和Cloudflare之间。 Cloudflare(使用“灵活的” https设置)实际上使用http连接到服务器。