【问题标题】:Wrong status code in HttpResponseHttpResponse 中的错误状态码
【发布时间】:2017-04-13 12:18:03
【问题描述】:

起初 - 我对 Java 很陌生。我正在开发一个使用 Shiro 的应用程序,并且我已经定义了一个用于注销的 REST。它有一个重定向,在 Chrome 中使用开发工具时给我 302 Found Status Code:

return Response.temporaryRedirect(redirectionAddress).build();

问题是,我无法使用 Postman 或仅通过在测试中调用它来获得此状态:

HttpUriRequest request = new HttpGet("http://localhost:8080/shop/logout/);
HttpResponse httpResponse = HttpClientBuilder.create().build().execute(request);

调用其余部分后,我只得到 200 OK 代码,没有 302 重定向。可能是服务器端没有会话时的响应。在 Postman 中,我使用的是 Basic Auth,但在 HttpGet 中没有授权,因为我不知道该怎么做。我尝试添加标题,但它也不起作用:

httpRequestBase.addHeader("Authorization", "Basic " + auth);

我应该先调用登录休息然后再注销吗?是否有任何选项可以在不登录的情况下测试注销?

【问题讨论】:

标签: java rest http jax-rs shiro


【解决方案1】:

Apache HttpClient 做自动重定向处理,见HttpClient Tutorial:

1.7。重定向处理

HttpClient 自动处理所有类型的重定向,除了那些被 HTTP 规范明确禁止的需要用户干预的重定向。 See Other(状态码 303)对 POSTPUT 请求的重定向将按照 HTTP 规范的要求转换为 GET 请求。

但您可以禁用它,请参阅HttpClientBuilder#disableRedirectHandling:

禁用自动重定向处理。

您修改后的代码:

HttpUriRequest request = new HttpGet("http://localhost:8080/shop/logout/");
HttpResponse httpResponse = HttpClientBuilder.create().disableRedirectHandling().build().execute(request);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多