2010-10-17 6 views
5

मैं जेएसपी के साथ वसंत सुरक्षा 3.0 का उपयोग कर रहा हूं। मैंने एक आवश्यकता सत्यापन फ़िल्टर बनाया है जो असत्यापित उपयोगकर्ताओं को "अपना ईमेल सत्यापित करें" पृष्ठ पर रीडायरेक्ट करता है।वसंत सुरक्षा 3.0: मैं उन URL को कैसे निर्दिष्ट करूं जिन पर एक कस्टम फ़िल्टर लागू होता है?

मैं बहुत की तरह अंतिम स्थान पर वसंत सुरक्षा फ़िल्टर स्टैक करने के लिए फिल्टर कहा:

मेरे ऐप-config.xml में

बीन परिभाषा:

<bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /> 

फ़िल्टर वसंत के में सुरक्षा फ़िल्टर सूची में जोड़ा मेरी security-config.xml:

<custom-filter ref="requireVerificationFilter" after="LAST" /> 

फ़िल्टर काम करता है, लेकिन यह अपने स्वयं के रीडायरेक्ट यूआरएल को फ़िल्टर करता है। यही है, फ़िल्टर असत्यापित उपयोगकर्ताओं को/एक्सेस/सत्यापित करने के लिए रीडायरेक्ट करता है, लेकिन वह URL फ़िल्टर द्वारा भी पकड़ा जाता है, जो रीडायरेक्ट विज्ञापन infinitum का प्रयास करता है।

मैंने यूआरएल को प्रतिबंधित करने के लिए <filter-mapping> टैग का उपयोग करने का प्रयास किया है, यह नया फ़िल्टर लागू होता है, लेकिन ऐसा लगता है कि जिस तरह से मैंने सोचा था।

<filter> 
     <filter-name>requireVerificationFilter</filter-name> 
     <filter-class>com.ebisent.web.RequireVerificationFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>requireVerificationFilter</filter-name> 
     <url-pattern>/account/*</url-pattern> 
    </filter-mapping> 

मैं वसंत सुरक्षा documention में "अपनी खुद की फिल्टर में जोड़ा जा रहा है" के माध्यम से पढ़ते हैं, लेकिन एक जवाब नहीं मिला: यहाँ web.xml प्रविष्टि मैं वैसे भी जोड़ा है।

मेरा सवाल है, मैं कैसे निर्दिष्ट कर सकता हूं कि मेरा फ़िल्टर किस URL पर लागू होता है?

अद्यतन:

मैं URL निर्दिष्ट फिल्टर के भीतर ही अनुमति देने के लिए द्वारा इस काम के मिला है। यह मेरे लिए ठीक काम करता है, लेकिन अगर ऐसा करने के लिए एक बेहतर/अधिक "वसंत" तरीका है, तो मुझे यह सुनकर खुशी होगी।

उत्तर

2

आप आप उन पंक्तियों के साथ <custom-filter ref="requireVerificationFilter" after="LAST" />

<http ...> 
    <intercept-url pattern="/access" ... filters="..., requireVerificationFilter, ..." /> 
    <intercept-url pattern="/verify" ... filters="none" /> 
    ... 
</http> 

कुछ है वास्तविक विन्यास एक्सएमएल अंदर यह करने के लिए (एक ही जगह है, तो आप फिल्टर आप चलाना चाहते हैं की एक सूची निर्दिष्ट और उन आप निकाल सकते हैं (और "none" का मतलब कोई नहीं है)। आपको वेब.एक्सएमएल में टायर फ़िल्टर जोड़ने की आवश्यकता नहीं है - केवल वसंत सुरक्षा फ़िल्टर श्रृंखला के साथ इनलाइन करें।

+0

धन्यवाद! मेरे पास मेरी सुरक्षा कॉन्फ़िगरेशन में इंटरसेप्ट-यूआरएल टैग हैं, लेकिन मुझे नहीं पता था कि आप वहां फ़िल्टर निर्दिष्ट कर सकते हैं। – outis

+5

लेकिन [वसंत सुरक्षा संदर्भ दस्तावेज़ीकरण] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-intercept-url-parents) कहता है कि: 'फ़िल्टर' विशेषता" केवल मूल्य "कोई नहीं" ले सकता है "। – btpka3

3

इसके लिए आपको org.springframework.security.web.FilterChainProxy का उपयोग करना चाहिए। विशेषता फ़िल्टर केवल none:

<http ...> 
     <custom-filter ref="requireVerificationFilterChain" after="LAST" /> 
</http> 

<b:bean id="requireVerificationFilterChain" class="org.springframework.security.web.FilterChainProxy"> 
     <filter-chain-map request-matcher="ant"> 
      <filter-chain pattern="/account/*" filters="requireVerificationFilter"/> 
     </filter-chain-map> 
</b:bean> 
<b:bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /> 
+0

यह समाधान मेरे लिए काम किया, धन्यवाद! –

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