2014-07-17 2 views
6

मुझे अपने वेबपैड में स्प्रिंग सिक्योरिटी पेश करने का प्रयास करते समय समस्या है।एक सार्वभौमिक मैच पैटर्न ('/ **') अन्य पैटर्न से पहले परिभाषित किया गया है

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     classpath:application-context.xml 
     classpath:web-context.xml 
     classpath:security-context.xml 
    </param-value> 
</context-param> 

<context-param> 
    <param-name>defaultHtmlEscape</param-name> 
    <param-value>true</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/services/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/admin</url-pattern> 
</servlet-mapping> 

<filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<session-config> 
    <session-timeout>30</session-timeout> 
    <tracking-mode>COOKIE</tracking-mode> 
</session-config> 

<!-- Spring Security config --> 
<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> 

security-context.xml: यहाँ मेरी web.xml है

<security:http auto-config='true'> 
    <security:intercept-url pattern="/admin.html" /> 
    <security:http-basic /> 
</security:http> 
<security:http pattern="/services/**" security="none" /> 
<security:authentication-manager> 
    <security:authentication-provider> 
     <security:user-service> 
      <security:user name="admin" password="analyzer4321" 
       authorities="ROLE_ADMIN" /> 
     </security:user-service> 
    </security:authentication-provider> 
</security:authentication-manager> 

जब मैं सर्वर को चलाने के लिए मैं शुरू पर यह अपवाद है कोशिश कर रहा हूँ:

java.lang.IllegalArgumentException: A universal match pattern ('/**') 
is defined before other patterns in the filter chain, causing them to be ignored. 
Please check the ordering in your <security:http> namespace or 
FilterChainProxy bean configuration. 

मुझे नहीं पता कि मैं क्या गलत कर रहा हूं। कोई सुझाव?

उत्तर

8

अपने security-context.xml फाइल में यह खंड:

<security:http auto-config='true'> 
    <security:intercept-url pattern="/admin.html" /> 
    <security:http-basic /> 
</security:http> 

इस (दूसरी) से पहले संसाधित किया जाता है एक (अपने आदेश की वजह से):

<security:http pattern="/services/**" security="none" /> 

प्रथम खंड का कहना है: /admin.html तक पहुंच को रोकना और किसी अन्य पेज पर मुफ्त पहुंच की अनुमति दें।

दूसरा खंड बेकार है। यह कहता है: /services/** से मेल खाने वाले सभी पृष्ठों तक पहुंच की अनुमति दें। लेकिन पहले से ही इसे पहले से ही अनुमति दी गई है।

आप दूसरे खंड को हटा सकते हैं, या इसे पहले से पहले रख सकते हैं।

एकाधिक <http> टैग्स का उपयोग करने के बारे में अधिक जानकारी के लिए Spring Security Reference देखें।

बीटीडब्ल्यू, <intercept-url> टैग आमतौर पर access विशेषता है। मुझे यकीन नहीं है कि <intercept-url> का उपयोग access के बिना किया जा सकता है। विवरण के लिए here देखें।

+1

पहला अनुभाग क्यों कहता है: /admin.html को छोड़कर किसी अन्य पृष्ठ पर निःशुल्क पहुंच की अनुमति दें? – DiveInto

0

पहला पैटर्न स्प्रिंग सुरक्षा लेता है पैटर्न विशेषता में http टैग से है। यदि http टैग में कोई पैटर्न विशेषता घोषित नहीं की जाती है, तो यह <security:http pattern="/**"> पर डिफ़ॉल्ट हो जाती है इंटरसेप्ट-यूआरएल टैग विशेषता को दूसरी जगह यानी http पैटर्न टैग के बाद लिया जाता है। यदि आपके पास दो या दो से अधिक http टैग हैं, तो आपको हमेशा मूल्यों के साथ पैटर्न विशेषता घोषित करनी चाहिए ताकि कोई विरोध न हो

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