2015-07-23 10 views
7

मैं टॉमकैट 7 का उपयोग कर रहा हूं। मैंने आधिकारिक टोमकैट दस्तावेज में सुझाए गए मूल कोर फ़िल्टरिंग की स्थापना की है।टोमकैट सीओआरएस फ़िल्टर और वसंत सुरक्षा

मैंने जो कुछ भी कर सकता है उसका परीक्षण किया है, लेकिन यह काम नहीं कर रहा है। यह देखते हुए कि मैं एक विक्रेता आवेदन का उपयोग कर रहा हूं जो मुझे पता है कि वसंत सुरक्षा फ़िल्टर का उपयोग कर रहा है, मैं सोच रहा हूं कि यहां कोई ज्ञात बग है या नहीं। मैं जानता हूँ कि यह कम है

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

, लेकिन यह काम करना चाहिए:

<!-- Spring Security START --> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/</url-pattern> 
</filter-mapping> 
<!-- Spring Security END --> 

मैं web.xml के लिए निम्न विन्यास जोड़ लिया है:

यहाँ मैं किस बारे में बात कर रहा हूँ है।

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <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,HEAD,OPTIONS,PUT</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowed.headers</param-name> 
     <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.exposed.headers</param-name> 
     <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.support.credentials</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.preflight.maxage</param-name> 
     <param-value>10</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

यह या तो काम नहीं किया:

मैं भी पहले से एक लंबे समय तक संस्करण की कोशिश की है।

क्या किसी को स्प्रिंग सुरक्षा के साथ सीओआरएस फ़िल्टर स्थापित करने का अनुभव है?

+2

क्या आप "यह काम नहीं कर रहे हैं" के बारे में अधिक विशिष्ट हो सकते हैं? – Djizeus

+0

आपका सटीक टॉमकैट संस्करण क्या है? – salyh

+0

क्या आपने वसंत फ़िल्टर से पहले कॉर्स फ़िल्टर डालने का प्रयास किया था? – user467257

उत्तर

0

आपका विक्रेता आवेदन भेजे पर प्रतिक्रिया करने के लिए सक्षम होना चाहिए उपयुक्त सीओआरएस हेडर के साथ preflight विकल्प अनुरोध। यह एक बग नहीं है, यह सिर्फ एक कॉन्फ़िगरेशन और/या कोड की कुछ पंक्तियां हैं जो वसंत के लिए सक्षम सीओआरएस में अनुपलब्ध हैं। सीओआरएस को सक्षम करना आपके विक्रेता के लिए एक बड़ा सौदा नहीं है, लेकिन यह आपके लिए एक बड़ा सौदा हो सकता है, खासकर यदि आपके पास ग्रहण में आपके अनुप्रयोग जावा परियोजना की एक प्रति नहीं है।

यदि आप भाग्यशाली हैं तो आपका विक्रेता आवेदन पहले से ही स्प्रिंग फ्रेमवर्क 4.2 आरसी 2 पर चलता है, आप अपने आप में एक्सएमएल में कॉन्फ़िगरेशन कर सकते हैं, https://spring.io/blog/2015/06/08/cors-support-in-spring-framework देखें। बस अपने अनुप्रयोगों web.xml पर <mvc:cors> ब्लॉक जोड़ने का प्रयास करें और अपनी आवश्यकताओं के अनुसार मानों को कॉन्फ़िगर करें। मैंने इसे अपने आप परीक्षण नहीं किया है, लेकिन यह चाल चलाना चाहिए।

लेकिन मुझे डर है कि तुम भाग्यशाली नहीं हो सकता है ...

तो चीजें कुछ पेचीदा हो गया है, तो आप आवेदन/अपने युद्ध फ़ाइल अद्यतन करने के लिए अपने विक्रेता पूछने के लिए नहीं करना चाहती। उस स्थिति में, इस पोस्ट पर एक नज़र डालें: Can't set Authentication Header with Angular and Spring Security। पोस्ट में उत्तर उस कॉन्फ़िगरेशन का वर्णन करता है जो आपके एप्लिकेशन के web.xml(एक नया सीओआरएस फ़िल्टर बनाएं और उसे उस वर्ग में बांधें जिसे आप बनाना चाहते हैं) और अतिरिक्त जावा फ़िल्टर क्लास (उदाहरण में) कक्षा com.abcinsights.controller में कक्षा SimpleCorsFilter नामित है) इसे काम करने के लिए दिखना है। अपने जावा में नया जावा क्लास जोड़ने के लिए, आपको अपने वॉर को अनपॅक करना होगा, नया जावा फ़िल्टर क्लास बनाएं और जोड़ें (अपनी नई जावा क्लास के अंदर पैकेज घोषणा को न भूलें) और इसे दोबारा दोबारा बनाना। यह सबसे जटिल हिस्सा है, क्योंकि यदि आपने अपनी कक्षा में या पुन: पैकेजिंग के दौरान कोई गलती की है, तो आपको फिर से तैनाती के बाद पहली बार त्रुटि दिखाई देगी।

-1

आप web.xml में से पहले वसंत सुरक्षा फ़िल्टर CORS फिल्टर जोड़ना होगा

CORS विकल्प HTTP अनुरोध स्प्रिंग सुरक्षा से संसाधित करने की आवश्यकता नहीं है

+0

अच्छी तरह से, मोराद सही है। एक उच्च स्तर पर यह किया जाना है। – mika

0

मैं गलत हो सकता हूं।लेकिन हर विन्यास फाइल मैंने कभी देखा परम नाम तुम्हारा से अलग किया है, शायद इस मुद्दे thats, क्या मैं हमेशा देखा है और किया गया था:

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
     <param-name>cors.allowOrigin</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportedMethods</param-name> 
     <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportedHeaders</param-name> 
     <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.exposedHeaders</param-name> 
     <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportsCredentials</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.maxAge</param-name> 
     <param-value>10</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
0

मैं एक ऐसी ही विन्यास था और मुख्य समस्या यह है कि था Authorizationcors.allowed.headers आरंभिक पैरामीटर के लिए टोमकैट के डिफ़ॉल्ट में हेडर की अनुमति नहीं है। इसलिए मुझे इसे इस तरह जोड़ना था:

<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>Authorization,Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
     <!--   ^^^^^^^^^^^^^ --> 
    </init-param> 
</filter> 
संबंधित मुद्दे