Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpServlet-如何知道是否使用SSL客户端身份验证_Java_Authentication_Servlets_Ssl_Jax Ws - Fatal编程技术网

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部分正常工作,所以它应该可以跨容器工作。