Джерси REST GET работает, а PUT нет. Указанный метод HTTP не разрешен для запрошенного ресурса

Уже несколько дней ломаю голову над этим. Этот небольшой фрагмент работает нормально (используя Jersey 2.26-b03 на Tomcat).

@GET
@Path("/{code}")
public Response update(@PathParam("code") String code) {
    System.out.println("!!!!!!!");
    return Response.status(Response.Status.OK).build();
}

curl -i -X GET http://localhost:18270/nyx/rest/servervirtueel/SVM0000
HTTP/1.1 200 OK

Затем последовала куча трассировки Джерси, которую я включил. Но если я только изменю GET на PUT (точно такой же метод, просто измените аннотацию):

@PUT
@Path("/{code}")
public Response update(@PathParam("code") String code) {
    System.out.println("!!!!!!!");
    return Response.status(Response.Status.OK).build();
}

curl -i -X PUT http://localhost:18270/nyx/rest/servervirtueel/SVM0000
HTTP/1.1 405 Method Not Allowed

Затем HTML сообщает мне, что «Указанный метод HTTP не разрешен для запрошенного ресурса». Однако POST работает (снова меняя аннотацию).


person tbeernot    schedule 15.09.2017    source источник
comment
Я надеюсь, что вы перекомпилируете код после изменения аннотации @PUT и развернете его на tomcat!. Для меня это хорошо работает с майкой 2.26 на коте 8.5.11.   -  person Rishikesh Darandale    schedule 15.09.2017
comment
Да, я согласен, что это невозможно воспроизвести с предоставленной вами информацией.   -  person Paul Samsotha    schedule 15.09.2017
comment
Конечно, уже тысячу раз. И, конечно же, изменение его на POST после этого сработало, поэтому я знаю, что делаю. Я использую Tomcat 7.0.75. Но я сделал еще один шаг вперед и написал ванильный сервлет, переопределяющий doGet, doPut, doPost и doDelete. Там тоже PUT и DELETE не работают, остальные есть. Так что, похоже, дело в Tomcat, а не в Джерси. Но установка http-метода только для чтения и коллекции веб-ресурсов не решает эту проблему. И на данный момент это вся информация, которой я располагаю, хотелось бы знать больше, чем то, что я вижу.   -  person tbeernot    schedule 15.09.2017
comment
Просто выстрел в темноте, но попробуй послать тело.   -  person Paul Samsotha    schedule 15.09.2017


Ответы (1)


Выяснилось, что клапан белого списка методов OWASP был настроен на уровне Tomcat (Catalina) для разрешения только GET и POST; это веб-приложение, которое до сих пор содержало только службы SOAP. Вы не видите этого ни в web.xml, ни в server.xml, но он есть в Catalina/localhost/webappname.xml.

person tbeernot    schedule 16.09.2017