Я пытаюсь использовать REST API Дженкинса. Дженкинс требует POST-запрос к URL, чтобы удалить работу. Это приводит к следующему:
- Я говорю своему выбранному Клиенту отправить POST на соответствующий URL.
Клиент отправляет POST и авторизуется, используя имя пользователя и пароль. - Дженкинс удаляет работу.
- Jenkins возвращает «302 - Найдено» с расположением папки, содержащей удаленное задание.
- Клиент автоматически отправляет POST в местоположение.
- Дженкинс отвечает «200 - ОК» и полными HTML страницы папки.
Это Почтальон прекрасно работает (если, конечно, я не отключу «Автоматически следовать перенаправлениям»). Однако на шаге 5 Джерси продолжает набирать «404», потому что я запретил анонимным пользователям просматривать данную папку. (Или «403», если я полностью заблокировал анонимных пользователей.) Обратите внимание, что аутентификация работает на шаге 1, потому что задание было успешно удалено!
У меня сложилось впечатление, что Джерси должен использовать данную аутентификацию для всех запросов, касающихся клиента. Есть ли способ сделать это на самом деле? Я действительно не хочу запрещать переадресацию только для того, чтобы выполнять каждую переадресацию самостоятельно.
Чтобы уточнить: проблема в том, что хотя Джерси следует за перенаправлением, но не может снова аутентифицироваться, что приводит к тому, что сервер отклоняет второй запрос.
Код в вопросе:
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-Content-Type-Options ("nosniff"), Location, Content-Length (0) и Server. Так что ни куки, ни токены, которые мог бы использовать Почтальон, и Джерси не обращали на это внимания.
Вопрос, слабо связанный с этим - если бы мне удалось зарегистрировать второй запрос, я мог бы понять, что происходит за кулисами.
EDIT2: Я также определил, что проблема явно в аутентификации. Если я разрешу анонимным пользователям просматривать нужную папку, ошибка исчезнет, и сервер ответит 200.