2012-05-04 6 views
6

मैंने जावा 6 एप्लिकेशन को टॉमकैट 7 पर चल रहे जावा 6 एप्लिकेशन के रूप में बनाया है। सुरक्षा के लिए वसंत सुरक्षा 2.0.1 ढांचा एकीकृत है।वसंत सुरक्षा: प्रमाणीकरण की आवश्यकता से डब्लूएसडीएल दस्तावेज़ को छोड़कर

सुरक्षा उद्देश्यों के लिए सेवा समापन बिंदु मूल प्रमाणीकरण के साथ संरक्षित किया जाना चाहिए। हालांकि, डब्लूएसडीएल दस्तावेज़ सार्वजनिक रूप से उपलब्ध होना चाहिए।

मैं इस तरह एक स्प्रिंग सुरक्षा विन्यास बनाया है:


<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
      http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd"> 

    <http> 
     <intercept-url pattern="/services/InitechAuthenticationService*" access="ROLE_WSUSER" /> 
     <intercept-url pattern="/services/InitechAuthenticationService?wsdl" filters="none" /> 
     <http-basic /> 
    </http> 

    <authentication-provider> 
     <user-service> 
      <user name="internal" password="${WS_USER_INTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
      <user name="external" password="${WS_USER_EXTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
     </user-service> 
    </authentication-provider> 

</beans:beans> 

समस्या यह है कि अवरोधन-यूआरएल लाइनों के आदेश, लाइन की परवाह किए बिना


<intercept-url pattern="/services/InitechAuthenticationService*" access="ROLE_WSUSER" /> 

हमेशा लागू किया जा रहा है है और लाइन


<intercept-url pattern="/services/InitechAuthenticationService?wsdl" filters="none" /> 

अनदेखा किया गया है। मुझे उम्मीद थी कि कोई भी व्यवहार को किसी भी तरह नियंत्रित कर सकता है, उदा। आदेश को specfiying द्वारा (ताकि वसंत सुरक्षा या तो पहले या अंतिम मिलान नियम का चयन करता है) या नियमों की विशिष्टता के द्वारा ताकि वसंत सुरक्षा सबसे विशिष्ट नियम का चयन करे, यानी इस मामले में अंत में "wsdl" वाला एक। मैं WSDL दस्तावेज़ को प्रमाणीकृत होने से कैसे बाहर कर सकता हूं, साथ ही वास्तव में डब्ल्यूएस का उपयोग करने के लिए प्रमाणीकरण को सक्षम कर सकता हूं?

उत्तर

4

मैंने Ant Path Matcher के बजाय नियमित अभिव्यक्तियों का उपयोग करने के लिए कॉन्फ़िगरेशन के http भाग को बदलकर समस्या हल की। पूरा काम कर विन्यास यहाँ है:


<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
      http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd"> 

    <http path-type="regex"> 
     <intercept-url pattern="/services/InitechAuthenticationService*" access="ROLE_WSUSER" /> 
     <intercept-url pattern="/services/InitechAuthenticationService\\?wsdl" filters="none" /> 
     <http-basic /> 
    </http> 

    <authentication-provider> 
     <user-service> 
      <user name="internal" password="${WS_USER_INTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
      <user name="external" password="${WS_USER_EXTERNAL_PASSWORD}" authorities="ROLE_WSUSER" /> 
     </user-service> 
    </authentication-provider> 

</beans:beans> 

परिवर्तन:

  1. जोड़ा पथ-प्रकार "regex" विशेषता में http
  2. बदल? सेवा मेरे \\? wsdl
के लिए इंटरसेप्ट-यूआरएल में
संबंधित मुद्दे