1

我正在尝试通过修改以下代码来检测 https 请求:

public static boolean isOnHttps(HttpServletRequest request) {
    String protoHeader = request.getHeader(Constants.Header.X_FORWARDED_PROTO);

    if (null == protoHeader || ! protoHeader.equals("https")) {
        return false;
    }

    return true;
}

上面的代码无法检测到一些 https 请求,对此我有两个问题:

  1. 参数getHeader代表什么?

  2. 我应该怎么做才能检测到通过 https 向我们的服务器发出的每个请求?

如果您能指出我的任何方向,那将非常有帮助。提前谢谢您的时间。

4

1 回答 1

0

问:getHeader 的参数代表什么?

的目的X_FORWARD_PROTO是确定一个 HTTP 请求的发起协议(因为中间的负载均衡器/代理可以终止 HTTPS 连接)。如果您发布您导入的常量,这将很有用。对于哪些请求,它无法检测到原始协议?但是,下面提到的方法应该会有所帮助..

问:我应该怎么做才能检测到通过 https 向我们的服务器发出的每个请求?

有一种方法可以在 https 请求的情况下SerlvetRequest#isSecure()返回true。来自Javadoc

返回一个布尔值,指示此请求是否使用安全通道(例如 HTTPS)发出。

如需进一步阅读,请考虑这个很好的答案

于 2012-11-20T14:58:37.280 回答