我正在尝试使用Jenkins的REST API。Jenkins要求对URL进行POST请求才能删除作业。结果如下:
这对Postman来说很好用(当然,除非我禁用“自动跟随重定向”)。但是,Jersey在第5步一直遇到“ 404”,因为我阻止了匿名用户查看该文件夹。(如果我完全阻止了匿名用户,则为“ 403”。)请注意,身份验证在步骤1中有效,因为作业已成功删除!
我的印象是,Jersey应该对所有与客户端有关的请求使用给定的身份验证。有没有一种方法可以真正实现这一目标?我真的不想仅仅为了自己做每个重定向而禁止重定向。
需要说明的问题是:Jersey遵循重定向,但无法再次进行身份验证,导致服务器拒绝了第二个请求。
有问题的代码:
HttpAuthenticationFeature auth = HttpAuthenticationFeature.basicBuilder()
.credentials(username, token)
.build();
Client client = ClientBuilder.newBuilder()
.register(auth)
.build();
WebTarget deleteTarget = client.target("http://[Jenkins-IP]/job/RestTestingArea/job/testJob/doDelete")
Response response = deleteTarget.request()
.post(null);
编辑:根据邮递员,“找到的302”只有5个标头:日期,X内容类型选项(“ nosniff”),位置,内容长度(0)和服务器。因此,Postman可能会使用的任何cookie或令牌都不会被Jersey忽略。
与这个问题松散相关的问题-如果我能够记录第二个请求,则我也许能够了解幕后发生的事情。
EDIT2:我也已确定问题显然与身份验证有关。如果我允许匿名用户查看有问题的文件夹,错误将消失并且服务器将回答200。
我在Paul Samsotha和Gautham的帮助下找到了答案。
TL; DR:这是预期的行为,您必须设置System属性http.strictPostRedirect=true
以使其起作用或自己执行第二个请求。
由于还描述了这里,HttpURLConnection
决定不执行,因为它是在HTTP标准中定义的,而是尽可能多的浏览器中实现它(所以在深入浅出而言,“做这样每个人,而不是它是如何工作的其他人”)重定向。这导致以下行为:
通过删除所有标头,身份验证将失败。由于Jersey默认情况下使用此类,因此导致我遇到的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句