使用HttpUriRequest传递X509Certificate信息

时间:2015-05-05 19:27:30

标签: spring spring-security x509certificate apache-commons-httpclient

我在Tomcat服务器上运行的Spring-Boot中实现了一个REST API,这个REST API调用另一个运行在不同Tomcat服务器上的Spring REST API。这两个Web应用程序都需要客户端证书进在进行REST呼叫时,如何将客户端证书信息从app1传递到app2?目前,app1上的REST调用如下所示:

@RequestMapping("/logintest")
@ResponseBody
ResponseEntity<String> logintest(HttpServletRequest request) {

    // Let's try and login.
    HttpUriRequest loginRequest = new HttpGet("http://localhost:8080/app2/login/")
    request.setAttribute(X509_CERT_ATTRIBUTE, 
        request.getAttribute("javax.servlet.request.X509Certificate"))
    HttpClient httpClient = new DefaultHttpClient()      
    HttpResponse response = httpClient.execute(cdpeRequest)
}

但是,这似乎没有将证书信息传递给app2。当app2尝试解析证书信息以进行身份​​验证时,它会返回null。

App2正在执行以下操作以从请求中提取客户端证书:

X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。由于两个应用程序都是使用JSESSIONID cookie在登录后建立SecurityContext的spring应用程序,因此我能够简单地将JSESSIONID cookie从App2传递到App1(登录应用程序)以进行REST调用。