java - HttpServlet - 如何知道是否使用 SSL 客户端身份验证

标签 java authentication servlets ssl jax-ws

我有一个 Servlet 容器 (Glassfish/OC4J),它为一些可以使用 HTTPS 访问的 JAX-WS Web 服务端点提供服务。 SSL 配置为支持客户端身份验证和仅服务器身份验证(如 Glassfish 上的 client-auth="want")。

在我的端点实现中,我想知道连接是否是在有或没有客户端身份验证的情况下完成的。我已经可以访问 HttpServletRequest 对象,但是 getAuthType() 方法始终返回 null,无论客户端身份验证是否完成(使用wireshark 检查以确保它满足我的要求)。

有人知道如何访问此类信息吗?

非常感谢

最佳答案

javax.servlet.request.X509Certificate 请求属性应返回 java.security.cert.X509Certificate 的数组.

您可以使用以下方式从您的请求中获取它:

X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate");

如果非空,并且包含某些内容,则第一个元素 (certs[0]) 将是客户端证书本身。该数组中可能还有其他元素,其中包含中间 CA 证书(客户端提供的可以是证书链),其中 cert[i]cert[i+ 颁发1].

关于java - HttpServlet - 如何知道是否使用 SSL 客户端身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8505071/

相关文章:

java - jsoup 获取 URL 时出错。 Status=503 仅在 Heroku 上

Java正则表达式匹配左边一个条件

javascript - 为什么我的 XMLHttpRequest 被中止?

ruby-on-rails - 使用设计手动设置 return_to

java - 检查 css 按钮是否被选择

java - 从 Android 中的 ArrayAdapter 获取资源

svn - 使用 Active Directory 用户从 CCNet (CruiseControl.net) 访问 SVN 存储库

java - 如何在 Java servlet 中找到 WAS SystemOut.log 的位置?

java - 找不到 c3p0 文件错误

java - 我可以使用普通的java类文件形式的web.xml文件读取上下文参数吗