是否有可能从jax-rs获取TLS客户端身份验证信息?

时间:2014-11-20 10:30:37

标签: java jax-rs client-certificates

我在OSGi环境中。我在RESTServiceRegistration中使用jax-rs类。我已经在下面配置了层,以在TLS握手期间要求客户端认证auth。现在我想从我的服务中访问它。

这是一个伪代码,我试图访问X509主题CommonName。

接口(用于REST Web服务注册):

@GET
@WebMethod
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/tls")
public String soutTLSClientCertInfo(@Context SomeContext context);

这是实施:

@Override
public String soutTLSClientCertInfo(@Context SomeContext context) {
    return context.getAttribute("java.etwas....tsl.cn_name");
}

1 个答案:

答案 0 :(得分:3)

我找到了答案...... 如果您有类似的内容,则自动注入HttpServletRequest

private HttpServletRequest request;

@Context public void setHttpServletRequest( HttpServletRequest request ) {
    this.request = request;
}

稍后您可以像以下一样使用它:

@Override
public String getTlsInfo() {
    StringBuilder stringBuilder = new StringBuilder(  );
    X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
    for (X509Certificate cert: certs) {
        stringBuilder.append(cert.getSubjectX500Principal().getName());
    }
    return stringBuilder;
}

您还应该小心javax.servlet版本......