我在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");
}
答案 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版本......