2014-11-20 2 views
2

OSGi 환경에 있습니다. RESTServiceRegistration에 jax-rs 클래스를 사용합니다. TLS 핸드 셰이크 중에 클라이언트 인증을 요구하도록 레이어를 구성했습니다. 이제는 내 서비스에서 액세스하고 싶습니다.jax-rs에서 TLS 클라이언트 인증 정보를 얻을 수 있습니까?

이것은 X509 제목 CommonName에 액세스하려고 시도한 의사 코드입니다.

인터페이스 (이것은 REST의 웹 서비스 등록에 사용되는) :

@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"); 
} 

답변

3

내가 대답을 발견했다 당신이있는 경우에 ... 는 autoinjected됩니다 HttpServletRequest의 이 같은 것

private HttpServletRequest request; 

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

나중에 사용할 수 있습니다. t 같은 :

@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 버전과주의해야 ...

관련 문제