在没有servlet上下文的情况下,如何访问Grizzly服务器资源中的客户端证书?

时间:2020-09-21 18:11:55

标签: ssl resources certificate grizzly

我正在使用Grizzly服务器来提供我的安全球衣资源。该资源需要客户端身份验证,并且客户端证书的subjectDN CN部分包含用户名,我可以在服务器中使用该用户名进行授权。 SSL显然可以处理身份验证,但是我需要客户端证书才能访问主题DN,以便找出与我连接的人。

例如,这在使用Tomcat服务器时可以正常工作,因为tomcat提供了完整的servlet环境,因此我可以将@Context HttpServletRequest注入我的资源中。然后,我可以从此上下文访问客户端证书。但是,当我仅在Java应用程序中运行Grizzly服务器时,就会收到错误消息:

Could not find a suitable constructor in javax.servlet.http.HttpServletRequest class.

这似乎意味着无法将servlet请求上下文注入到我的资源方法中。

我知道我可以添加WebappContext和ServletRegistation,然后将请求映射到该servlet,但是我想知道是否有可能在独立的grizzly服务器中在没有servlet上下文的情况下访问客户端证书?如果没有的话,对我来说似乎很疏忽。毕竟,Grizzly允许您在没有servlet上下文的情况下建立完整的相互身份验证的连接,但随后似乎没有提供一种让您找出与您连接的人的方法。

1 个答案:

答案 0 :(得分:0)

我还没有找到获取完整客户证书的方法,但是,正如我在问题中所述,我实际上只是在寻找一种获取subjectDN的方法-主体。事实证明,您可以向资源中注入@Context SecurityContext,然后从该对象获取主体。

    @PUT
    public Response pushData(@Context SecurityContext securityContext, InputStream is) {
        String clientDN = securityContext.getUserPrincipal();
        ...
    }
相关问题