Java Jenkins在请求头中传递crump后在EC2服务器中发送403
我在API调用中使用CSRF Jenkins crumps从Java在Jenkins中创建一个新作业 我尝试了以下方法 调用API以获取碎屑数据 http://admin:11542c80972c3a2b863453d234de68b1d@10.139.163.33/api/json 我还尝试了下面的URL 下面是从服务器获得的JSON响应 {“U类”:“hudson.security.csrf.defaultcrump发行人”,“crump”:“b272a09b604e7b7cc8ee1431f0a0143fa1422db2fb5f92955b0356a31da37463”,“crumrequestfield”:“Jenkins crump”} 在下一步中,我将给Jenkins打电话,创建一个新作业,标题为Java Jenkins在请求头中传递crump后在EC2服务器中发送403,java,jenkins,java-8,Java,Jenkins,Java 8,我在API调用中使用CSRF Jenkins crumps从Java在Jenkins中创建一个新作业 我尝试了以下方法 调用API以获取碎屑数据 http://admin:11542c80972c3a2b863453d234de68b1d@10.139.163.33/api/json 我还尝试了下面的URL 下面是从服务器获得的JSON响应 {“U类”:“hudson.security.csrf.defaultcrump发行人”,“crump”:“b272a09b604e7b7cc8ee143
Jenkins-Crumb:b272a09b604e7b7cc8ee1431f0a0143fa1422db2fb5f92955b0356a31da37463
Jenkins给了我403,我正在使用HttpGet获取令牌,并使用HttpPost和上面的头并发送给Jenkins
当我尝试与邮递员,它没有给出这个错误。我在1台ec2服务器上运行Java应用程序,在另一台ec2服务器上运行jenkins
没有代理,我也尝试过使用各种选项,如启用代理兼容性、重新启动jenkins等,但不起作用
请给我指点
使用的Java代码是
HttpPost postRequest = new HttpPost(url);
JenkinsCrumb crumb = jenkinsHelper.getCrumb();
String encodedPassword = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes());
postRequest.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedPassword);
postRequest.addHeader(new BasicHeader(crumb.getCrumbRequestField(), crumb.getCrumb()));
return postRequest;
获取面包屑的代码是
String urlWithToken = "http://" + (user + ":" + pwd) + "@";
HttpGet request = new HttpGet(jenkinsBaseUrl.replace("http://", urlWithToken) + "crumbIssuer/api/json");
request.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedPassword);
CloseableHttpResponse httpResponse = httpClient.execute(request);
我也尝试过使用CURL命令,但仍然得到了相同的响应我能够通过对crump和POST请求使用相同的HttpClient(CloseableHttpClient)来解决这个问题。早些时候,我使用了两个独立的客户端,一个用于获取面包屑,另一个用于发布数据。对这两个应用程序使用共享httpclient会导致出现成功状态 希望这能帮助其他面临类似问题的开发人员