2013-07-25 2 views
9

Я работаю над проектом веб-сервисов RESTful, я использую Apache Tomcat и JAX-RS.Как заставить Apache Tomcat принять метод DELETE

Я хочу принимать запросы DELETE от клиента, но всякий раз, когда я отправляю запрос DELETE с помощью расширенного клиентского модуля Chrome REST, он дает код ответа 403 Запретный.

Так как я могу заставить Apche Tomcat принять запрос DELETE?

+1

Да, у меня такие же проблемы с моей установкой.Я попытался установить Servlet по умолчанию для readOnly = false, но это все равно не помогает. На данный момент я прибегал к использованию POST + GET –

ответ

2

Вот причины, почему вы можете получить 403 Forbidden от Tomcat для УДАЛИТЬ запроса:

На каждом HTTP DELETE запрос обрабатывается сервлетом, следующий обработка осуществляется:

  • Если модификации статических ресурсов не разрешены (задано параметром конфигурации), возвращайте статус HTTP 403 (запрещено).

  • Если предпринимается попытка удалить ресурс из/META-INF или/WEB-INF, верните статус HTTP 403 (запрещено).

  • Если запрошенный ресурс не существует, возвращается статус HTTP 404 (не найдено)

  • Unbind ресурс из контекста каталога, содержащего статические ресурсы данного веб-приложения. В случае успеха возвратите HTTP-статус 204 (без содержимого). В противном случае вернуть статус HTTP 405 (метод не разрешен).

Источник: http://tomcat.apache.org/tomcat-5.5-doc/catalina/funcspecs/fs-default.html

Убедитесь, что вы придерживаться спецификаций TOMCAT, чтобы избежать каких-либо проблем.

+0

. В этом вопросе упоминается JAX-RS, так почему это имеет значение? – mthmulders

+2

@mthmulders JAXRS или любые другие структуры веб-сервисов расположены за перехватчиком запроса tomcat. Если tomcat отклоняет запросы с уровня контейнера, ваш код jaxrs не будет выполнен. –

8

Tomcat блокировал методы DELETE для меня из-за моих фильтров CORS.

Мне нужны были новые фильтры, зарегистрированные в моем файле web.xml. Вот пример очень разрешительных один:

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
     <param-name>cors.allowed.headers</param-name> 
     <param-value>Accept,Accept-Encoding,Accept-Language,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Connection,Content-Type,Host,Origin,Referer,Token-Id,User-Agent, X-Requested-With</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowed.origins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowed.methods</param-name> 
     <param-value>GET, POST, PUT, DELETE, OPTIONS, HEAD</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
0

Чтобы включить другие методы HTTP в коте, настройки в web.xml

<servlet> 
    <servlet-name>default</servlet-name> 
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> 
    <init-param> 
     <param-name>debug</param-name> 
     <param-value>0</param-value> 
    </init-param> 
    <init-param> 
     <param-name>listings</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>readonly</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Параметры debug и listings загружаются по умолчанию в коте, в то время как по умолчанию readonly - это правда, что означает, что доступны только GET и POST.

Другой PARAMS доступен:

 
    debug    Debugging detail level for messages logged  
         by this servlet. [0]       

    fileEncoding  Encoding to be used to read static resources 
         [platform default]        

    input    Input buffer size (in bytes) when reading  
         resources to be served. [2048]     

    listings   Should directory listings be produced if there 
         is no welcome file in this directory? [false] 
         WARNING: Listings for directories with many  
         entries can be slow and may consume    
         significant proportions of server resources. 

    output    Output buffer size (in bytes) when writing  
         resources to be served. [2048]     

    readonly   Is this context "read only", so HTTP   
         commands like PUT and DELETE are    
         rejected? [true]        

    readmeFile   File to display together with the directory  
         contents. [null]        

    sendfileSize  If the connector used supports sendfile, this 
         represents the minimal file size in KB for  
         which sendfile will be used. Use a negative  
         value to always disable sendfile. [48]   

    useAcceptRanges  Should the Accept-Ranges header be included  
         in responses where appropriate? [true]   

+1

По-прежнему не работает :( – laike9m

+0

Может быть, что-то не так с вашей окружающей средой.Это работает не только для меня, но и для других, кто меня голосует. Почему вы проголосовали за меня? – Moesio

+0

Я решил свою проблему, оказывается, t действительно посылает запрос DELETE. – laike9m

2

Еще одно предложения, дважды проверьте URL вашего звонка и убедитесь, что он указует на предполагаемый сервлет.

У меня такая же ошибка, когда я опечатал URL-адрес службы в своем коде. У меня было api/roles/Service/roles, когда мне было нужно api/rolesService/roles, исправление опечатки разрешило ошибку. Вы ожидали бы 404, но с DELETE на Tomcat вы получите 403.

Смежные вопросы