2015-07-14 4 views
6

मेरे पास एक एप्लिकेशन है और मेरे उपयोगकर्ताओं को छवियों को लोड करने के लिए वसंत के नियंत्रक मानचित्रण का उपयोग करता है। (इनपुटस्ट्रीम, प्रतिक्रिया, आदि)।वसंत सुरक्षा - कैश-नियंत्रण से बचने का कोई तरीका नहीं

मेरे नियंत्रक में मैंने हेडर को कैश-कंट्रोल पर सेट किया है, फाइलों पर आधारित है, आदि। लेकिन हमेशा प्रज्ञा है: नो-कैश और कैश-कंट्रोल: सभी अनुरोधों के अंदर "अधिकतम आयु = 0", और यह मेरी प्रतिक्रिया को प्रतिस्थापित करता है सेटिंग्स।

मैं इसे हल करने के लिए सबकुछ कोशिश कर रहा था, लेकिन कुछ भी काम नहीं करता है।

मैं पहले से ही सभी पेज पढ़ सकते हैं और सब कुछ मुझे लगता है कि के बारे में पाया की कोशिश: http://docs.spring.io/autorepo/docs/spring-security/3.2.0.CI-SNAPSHOT/reference/html/headers.html

मेरे वसंत security.xml है:

<security:headers disabled="true"/> 

कोई भी इस का समाधान करने के लिए एक अच्छा विचार है?

याद रखें कि छवियों को लोड करने के लिए मुझे अपने नियंत्रक के माध्यम से लोड करने की आवश्यकता है, मैं कभी भी स्थैतिक कॉल नहीं करता हूं।

+0

क्या आप वह कोड प्रदान कर सकते हैं जिसका उपयोग आप हेडर को अपने नियंत्रक में सेट करने के लिए करते हैं? क्या समस्या तब भी होती है जब आप पूरी तरह से वसंत सुरक्षा को हटा देते हैं? –

उत्तर

0

प्रति Spring Security reference (3.2.0) आप जुड़े हैं,

डिफ़ॉल्ट हेडर के सभी हो सकता है आसानी से कोई भी बच्चा तत्वों

, बस अपने आप में headers को जोड़ने के साथ तत्व का उपयोग जोड़ा सभी बच्चे तत्वों को चालू करेगा (जैसे कैश नियंत्रण, xxs, ...)। या तो हेडर को बिल्कुल शामिल न करें या स्पष्ट रूप से निर्दिष्ट करें कि आप कौन से बाल तत्व सक्षम करना चाहते हैं।

बीटीडब्ल्यू, मुझे नहीं लगता कि disabled शीर्षकों की एक विशेषता है (3.2.0 के लिए)। यदि आप version 4.0 का उपयोग कर रहे हैं, तो disabled विशेषता के साथ-साथ disabled-defaults भी है, जो आप चाहते हैं कि हो सकता है।

+0

अब कोशिश की और हल नहीं किया। मैं अपने अनुरोधों के "नो-कैश" को हटाना चाहता हूं, उनमें शामिल नहीं है। –

+0

आपने क्या प्रयास किया? क्या आप दिखा सकते हैं कि आपकी अपडेटेड कॉन्फ़िगरेशन कैसा दिखता है। – ikumen

+0

ज़रूर, config है: <सुरक्षा: http का उपयोग-भाव = "true" पहुँच-निर्णय प्रबंधक-रेफरी = "accessDecisionManager"> \t \t \t \t \t \t \t <सुरक्षा: हेडर /> \t \t <सुरक्षा: CSRF विकलांग = "true" /> \t \t \t \t

-1

यह कुछ समय दिया गया है - लेकिन, जबकि एक ही समस्या पर शोध, मैं इस पोस्ट पाया है और इस काम किया है या मुझे -

disable caching for specific url in spring security

समाधान ऊपर संदर्भित किया जाता का सौंदर्य यह है कि यह प्रत्येक हेडर विशेष रूप से सक्षम बनाता है अपने मूल वर्ग का उपयोग करके, और संबंधित हेडर को विशिष्ट अनुरोध पथ को संरेखित करने के लिए एंटीमैचर्स का उपयोग करता है। मेरे मामले में, मैंने अपने स्थिर संसाधनों के लिए कैश समाप्ति सेट के साथ एक अलग कैश संदर्भ का उपयोग किया और कोई अन्य कैश के बिना सभी जेएसपीएस के लिए। चूंकि यह एक चींटी matcher है, नियंत्रक यूरी एक ही दृष्टिकोण का उपयोग कर मिलान किया जा सकता है।

7

मामले में एक जावा आधारित विन्यास, कैश नियंत्रण हेडर इस तरह से निष्क्रिय किया जा सकता है का उपयोग करता है:

@Configuration 
@EnableWebMvcSecurity 
class SpringWebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(final HttpSecurity http) throws Exception { 
     http.headers().cacheControl().disable(); 
    } 
} 

यह CacheControlHeadersWriter निकाल देंगे और स्प्रिंग कैश नियंत्रण हेडर किसी भी अधिक नहीं लिखेगा।

+0

मैं इस कॉन्फ़िगरेशन को कहां रखूं? –

+0

उत्तर के लिए धन्यवाद। मेरे लिये कार्य करता है। –

11

Cache-Control हेडर उन्हें HttpServletResponse में अधिभावी द्वारा एक प्रति कार्य के आधार पर नियंत्रित किया जा सकता:

@RequestMapping(value = "/foo", method = RequestMethod.GET) 
public String someAction(HttpServletResponse response) { 
    response.setHeader("Cache-Control", "no-transform, public, max-age=86400"); 

    // ... 
} 

स्प्रिंग सुरक्षा विन्यास के साथ बेला की आवश्यकता नहीं है।

http://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html#headers-cache-control देखें।

+0

यह काम करने के लिए मिला एकमात्र दृष्टिकोण है। आपका बहुत बहुत धन्यवाद! –

+0

आपको बहुत बहुत धन्यवाद। आपके समाधान ने बहुत समय बचा लिया है। – harshavmb

+3

यह ओवरराइड करने के बजाय हेडर को डुप्लिकेट करेगा। मुझे 'नो-कैश, नो-स्टोर, अधिकतम आयु = 0, पुनः-पुनरीक्षण, अधिकतम आयु = 7200' मिल रहा है – Kumait

0

aha के उत्तर में जोड़ना। आपको कुछ कचरे के साथ प्रगमा हेडर को ओवरराइड करने की भी आवश्यकता है।

@RequestMapping(value = "/foo", method = RequestMethod.GET) 
public String someAction(HttpServletResponse response) { 
    response.setHeader("Cache-Control", "no-transform, public, max-age=86400"); 
    response.setHeader("Pragma", ""); 
    // ... 
} 

भी हैडर समाप्त हो रहा है अभी भी जवाब में दिखाता है, लेकिन अधिकांश ब्राउज़र में कैश नियंत्रण हेडर द्वारा ओवरराइड किया जा रहा है।

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