2016-11-29 9 views
0

Сначала - я довольно новичок в Java. Я работаю над приложением, которое использует Shiro, и я определил REST для выхода из системы. Он имеет редирект, внутри которого дает мне 302 Found код состояния при использовании средства разработки в Chrome:Неверный код состояния в HttpResponse

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

Проблема заключается в том, что я не могу получить этот статус с помощью почтальона или просто запустив его в тесте:

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); 

Должен ли я первым вызвать вход отдых и выход из системы, чем? Есть ли возможность проверить выход без входа?

+1

Почтальон делает редирект, вы видите только результат перенаправления см https://github.com/postmanlabs/postman-app-support/issues/186 , – dur

ответ

1

Apache HttpClient делает автоматическую обработку перенаправлять см HttpClient Tutorial:

1.7. Обработка переадресации

HttpClient обрабатывает все типы переадресаций автоматически, за исключением тех, которые явно запрещены спецификацией HTTP, как требующие вмешательства пользователя. See Other (код состояния 303) перенаправления на POST и PUT запросы преобразуются в запросы GET, как того требует спецификация HTTP.

но вы можете отключить его, см HttpClientBuilder#disableRedirectHandling:

Отключает автоматическую обработку перенаправлять.

Ваш измененный код:

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