当前位置: 代码迷 >> java >> java是否在url中检测到错误的协议?
  详细解决方案

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

热度:14   发布时间:2023-07-17 20:28:15.0

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

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

编码似乎很简单:

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:

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

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有关。

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

  相关解决方案