You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java 8+Tomcat 8.5.9的Servlet中获取浏览器请求的SSL协议版本

在Java 8 + Tomcat 8.5.9的Servlet中获取SSL协议版本

嘿,这个需求我刚好折腾过,在你当前的环境下,有两种靠谱的方法可以拿到请求使用的SSL/TLS协议版本,给你详细说下:

方法一:使用Tomcat特有的请求属性

Tomcat会把SSL相关的细节放到请求的属性里,其中就包含协议版本。你可以直接通过request.getAttribute()获取这个属性,属性名是org.apache.coyote.request.SSL_PROTOCOL。

代码示例

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取Tomcat提供的SSL协议版本属性
    String sslProtocol = (String) request.getAttribute("org.apache.coyote.request.SSL_PROTOCOL");
    
    if (sslProtocol != null) {
        response.getWriter().println("当前请求使用的SSL协议版本: " + sslProtocol);
    } else {
        // 说明请求不是HTTPS,或者Tomcat未正确配置SSL
        response.getWriter().println("无法获取SSL协议版本,请确认请求为HTTPS且Tomcat SSL配置正常");
    }
}

这个方法的优势是简单直接,不需要额外处理,只要是Tomcat处理的HTTPS请求,就能拿到值。不过要注意这是Tomcat专属的属性,换其他Servlet容器(比如Jetty)可能就不适用了。

方法二:使用Java EE标准API(更通用)

如果你想写更通用的代码,适配不同容器,可以用Java EE提供的getSSLSession()方法,从请求中拿到SSLSession对象,再调用它的getProtocol()方法获取版本。

代码示例

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 先判断当前请求是否是HTTPS
    if (request.isSecure()) {
        SSLSession sslSession = request.getSSLSession();
        if (sslSession != null) {
            String sslProtocol = sslSession.getProtocol();
            response.getWriter().println("当前请求使用的SSL协议版本: " + sslProtocol);
        } else {
            response.getWriter().println("无法获取SSLSession对象");
        }
    } else {
        response.getWriter().println("当前请求不是HTTPS请求,无法获取SSL协议版本");
    }
}

这个方法是Java EE的标准接口,只要你的Servlet容器支持(Tomcat 8.5当然支持),就能正常工作。需要注意的是,非HTTPS请求调用getSSLSession()会返回null,所以一定要先通过request.isSecure()判断请求类型。

额外注意事项

  • 确保你的Tomcat已经正确配置了HTTPS连接器,比如在server.xml里配置了带SSL的Connector(参考下面的示例片段):
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                     type="RSA"/>
    </SSLHostConfig>
</Connector>
  • 如果测试时拿到的是null,先检查请求是否真的是HTTPS(比如访问https://localhost:8443/你的Servlet路径),再确认Tomcat的SSL配置是否生效。

内容的提问来源于stack exchange,提问作者Amey Sawant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:43:46