2013-07-25 8 views
9

मैं रीस्टफुल वेब सेवाओं की एक परियोजना पर काम कर रहा हूं, मैं अपाचे टॉमकैट और जेएक्स-आरएस का उपयोग कर रहा हूं।अपाचे टॉमकैट को कैसे हटाएं DELETE विधि

मैं क्लाइंट से DELETE अनुरोध स्वीकार करना चाहता हूं लेकिन जब भी मैं उन्नत आरईएसटी क्लाइंट क्रोम प्लगइन से एक डेली अनुरोध भेजता हूं तो यह प्रतिक्रिया कोड 403 निषिद्ध है।

तो मैं अप्हे टोमकैट को अनुरोध अनुरोध कैसे स्वीकार कर सकता हूं?

+1

हाँ मुझे अपने सेटअप के साथ एक ही समस्या है।मैंने डिफ़ॉल्ट Servlet को केवल पढ़ने के लिए सेट करने का प्रयास किया है = झूठी लेकिन यह अभी भी मदद नहीं कर रहा है। अभी के लिए मैंने केवल POST + GET –

उत्तर

2

यहाँ कारणों से आप एक 403 एक हटाने का अनुरोध के लिए बिलाव से निषिद्ध प्राप्त कर सकते हैं कर रहे हैं:

प्रत्येक HTTP इस सर्वलेट द्वारा संसाधित अनुरोध DELETE पर, निम्नलिखित प्रसंस्करण प्रदर्शन किया जाएगा:

  • यदि स्थैतिक संसाधनों में संशोधन की अनुमति नहीं है (कॉन्फ़िगरेशन पैरामीटर द्वारा सेट किया गया है), HTTP स्थिति 403 (वर्जित) लौटाएं।

  • यदि/मेटा-आईएनएफ या/वेब-आईएनएफ से संसाधन को हटाने का प्रयास किया गया है, तो HTTP स्थिति 403 (वर्जित) लौटाएं।

  • तो अनुरोध किया गया संसाधन मौजूद नहीं है, वापसी HTTP स्थिति 404 (नहीं मिला)

  • निर्देशिका इस वेब आवेदन के लिए निश्चित संसाधनों से युक्त संदर्भ से संसाधन अनबाइंड। यदि सफल हो, तो HTTP स्थिति 204 (कोई सामग्री नहीं) लौटाएं। अन्यथा, HTTP स्थिति 405 (विधि की अनुमति नहीं है) लौटाएं।

स्रोत: http://tomcat.apache.org/tomcat-5.5-doc/catalina/funcspecs/fs-default.html

सुनिश्चित करें कि आप बिल्ला विनिर्देशों का पालन करना किसी भी समस्या से बचने के लिए सुनिश्चित करें।

+0

का उपयोग करने का सहारा लिया है प्रश्न में जेएक्स-आरएस का उल्लेख है, तो यह क्यों मायने रखता है? – mthmulders

+2

@mthmulders JAXRS या किसी अन्य वेब सेवा ढांचे टोमकैट अनुरोध इंटरसेप्टर के पीछे बैठता है। यदि टॉमकैट कंटेनर स्तर से अनुरोधों को खारिज कर रहा है, तो आपके जैक्सर्स कोड को निष्पादित नहीं किया जाएगा। –

8

टॉमकैट मेरे कॉरस फ़िल्टर की वजह से मेरे लिए DELETE विधियों को अवरुद्ध कर रहा था।

मुझे अपनी 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 सत्य है, जिसका अर्थ है कि केवल प्राप्त करें और पोस्ट उपलब्ध हैं।

अन्य पैरामीटर उपलब्ध हैं:

 
    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

मैंने अपनी समस्या हल कर दी है, पता चला है कि मैंने नहीं किया ' टी वास्तव में एक DELETE अनुरोध भेजता है। – laike9m

2

एक और सुझाव, डबल अपने कॉल का URL देखें और यह सुनिश्चित करें कि यह आपका वांछित सर्वलेट की ओर इशारा करते हैं।

मुझे एक ही त्रुटि मिली जब मैंने अपने कोड में एक सेवा यूआरएल गलत टाइप किया। मेरे पास api/roles/Service/roles था जब मुझे api/rolesService/roles की आवश्यकता थी, टाइपो को ठीक करने से त्रुटि हल हो गई। आप 404 की उम्मीद करेंगे, लेकिन टॉमकैट पर डेलेटी के साथ, आपको 403 मिलेंगे।

संबंधित मुद्दे