Java HttpServlet-如何知道是否使用SSL客户端身份验证
我有一个Java HttpServlet-如何知道是否使用SSL客户端身份验证,java,authentication,servlets,ssl,jax-ws,Java,Authentication,Servlets,Ssl,Jax Ws,我有一个Servlet容器(Glassfish/OC4J),它为一些JAX-WSWeb服务端点提供服务,这些端点可以使用HTTPS访问。SSL配置为支持客户端身份验证和仅服务器身份验证(如Glassfish上的Client auth=“want”) 在我的端点实现中,我想知道连接是通过客户端身份验证还是不通过客户端身份验证完成的。我已经有权访问HttpServletRequest对象,但是getAuthType()方法总是返回null,无论客户端身份验证是否完成(使用wireshark进行检查以
Servlet
容器(Glassfish/OC4J),它为一些JAX-WSWeb服务端点提供服务,这些端点可以使用HTTPS访问。SSL配置为支持客户端身份验证和仅服务器身份验证(如Glassfish上的Client auth=“want”)
在我的端点实现中,我想知道连接是通过客户端身份验证还是不通过客户端身份验证完成的。我已经有权访问HttpServletRequest
对象,但是getAuthType()
方法总是返回null,无论客户端身份验证是否完成(使用wireshark进行检查以确保它执行了我想要的操作)
有人知道如何获取这些信息吗
非常感谢,
javax.servlet.request.X509Certificate
request属性应该返回一个数组
您可以通过以下方式从您的请求中获取:
X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate");
如果为非null,并且包含某些内容,则第一个元素(
certs[0]
)将是客户端证书本身。此数组中可能还有其他元素,其中将包含中间CA证书(客户端提供的可以是证书链),其中cert[i]
由cert[i+1]
颁发,在这种情况下使用Glassfish,但我也使用其他容器,如OC4J,我希望有一个对这两者都有效的解决方案。更新问题,添加Glassfish和oc4jThanks,这正是我所需要的。我刚刚在Glassfish上测试了它,希望它能在Servlet规范的OC4JIt部分正常工作,所以它应该可以跨容器工作。