2013-02-14 34 views
6

मैं वसंत सुरक्षा के साथ वसंत 3.1.1.RELEASE का उपयोग कर रहा हूँ। मैं जेबॉस 7.1.1 पर तैनात कर रहा हूं। अंतिम। मैं दो http सुरक्षा तत्वों को कॉन्फ़िगर करना चाहता हूं, प्रत्येक एक अलग प्रमाणीकरण फ़िल्टर के साथ। मैं उसको कैसे करू? नीचे वसंत सुरक्षा कॉन्फ़िगरेशन के साथ, मुझे अपवाद मिलता है "java.lang.IllegalArgumentException: फ़िल्टर श्रृंखला में अन्य पैटर्न से पहले एक सार्वभौमिक मिलान पैटर्न ('/ **') परिभाषित किया गया है" मेरे युद्ध को तैनात करने पर। अगर मैं दूसरे http ब्लॉक (नाम "पीडी सुरक्षा") पर टिप्पणी करता हूं, तो सब कुछ ठीक हो जाता है।मैं विभिन्न प्रमाणीकरण फ़िल्टर के साथ दो स्प्रिंग सुरक्षा http तत्वों को कैसे कॉन्फ़िगर कर सकता हूं?

<http pattern="/activities/**" security="none" /> 
<http pattern="/audio/**" security="none" /> 
<http pattern="/bootstrap/**" security="none" /> 
<http pattern="/bootstrap-editable/**" security="none" /> 
<http pattern="/css/**" security="none" /> 
<http pattern="/images/**" security="none" /> 
<http pattern="/js/**" security="none" /> 
<http pattern="/resources/**" security="none" /> 
<http pattern="/temp/**" security="none" /> 
<http name="defaultSecurity" security-context-repository-ref="subcoSecurityContextRepository" 
    auto-config="false" use-expressions="true" authentication-manager-ref="authenticationManager" 
    access-denied-page="/denied" entry-point-ref="loginUrlAuthenticationEntryPoint"> 
    <custom-filter position="FORM_LOGIN_FILTER" 
     ref="subcoUsernamePasswordUrlAuthenticationFilter" /> 
    <intercept-url pattern="/login" access="permitAll" /> 
    <intercept-url pattern="/logout" access="permitAll" /> 
    <intercept-url pattern="/denied" access="isAuthenticated()" /> 
    <intercept-url pattern="/welcome" access="permitAll" /> 
    <intercept-url pattern="/authenticate" access="permitAll" /> 
    <intercept-url pattern="/user" 
     access="hasAnyRole('User','Administrator')" /> 
    <intercept-url pattern="/landing" 
     access="hasAnyRole('User','Student','Teacher','Administrator')" /> 
    <intercept-url pattern="/book/*" 
     access="hasAnyRole('User','Student','Teacher','Administrator')" /> 
    <intercept-url pattern="/admin" access="hasRole('Administrator')" /> 
    <intercept-url pattern="/admin/*" access="hasRole('Administrator')" /> 
    <intercept-url pattern="/getResource" access="hasAnyRole('Student','Teacher','Administrator')" /> 
    <logout invalidate-session="true" logout-success-url="/logout" 
     logout-url="/j_spring_security_logout" /> 
</http> 

<!-- Reg controller for PD --> 
<http name="pdSecurity" auto-config="false" use-expressions="true" authentication-manager-ref="authenticationManager" access-denied-page="/denied" entry-point-ref="loginUrlAuthenticationEntryPoint"> 
    <custom-filter position="FORM_LOGIN_FILTER" ref="pdUsernamePasswordUrlAuthenticationFilter"/> 
    <intercept-url pattern="/pdregistration/regfailure" access="hasAnyRole('Teacher')"/> 
    <intercept-url pattern="/pdregistration/regsuccess" access="hasAnyRole('Teacher')"/> 
    <logout invalidate-session="true" 
     logout-success-url="/logout" 
     logout-url="/j_spring_security_logout" /> 
</http> 

यहाँ अपवाद है ...

08:52:23,730 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-5) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChainProxy': Invocation of init method failed; nested exception is 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 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [classes.jar:1.6.0_37] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [classes.jar:1.6.0_37] 
    at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_37] 
Caused by: 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 
    at org.springframework.security.config.http.DefaultFilterChainValidator.checkPathOrder(DefaultFilterChainValidator.java:49) [spring-security-config-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.security.config.http.DefaultFilterChainValidator.validate(DefaultFilterChainValidator.java:39) [spring-security-config-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.security.web.FilterChainProxy.afterPropertiesSet(FilterChainProxy.java:149) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    ... 20 more 

08:52:23,742 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/myproject]] (MSC service thread 1-5) Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChainProxy': Invocation of init method failed; nested exception is 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 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [classes.jar:1.6.0_37] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [classes.jar:1.6.0_37] 
    at java.lang.Thread.run(Thread.java:680) [classes.jar:1.6.0_37] 
Caused by: 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 
    at org.springframework.security.config.http.DefaultFilterChainValidator.checkPathOrder(DefaultFilterChainValidator.java:49) [spring-security-config-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.security.config.http.DefaultFilterChainValidator.validate(DefaultFilterChainValidator.java:39) [spring-security-config-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.security.web.FilterChainProxy.afterPropertiesSet(FilterChainProxy.java:149) [spring-security-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
    ... 20 more 
+0

आपके पास दो ' 'अनुभाग नहीं हो सकते हैं जो सरल' पैटर्न '/' सुरक्षा' परिभाषाएं नहीं हैं, यानी जब आप' Xaerxess

उत्तर

19

दूसरा <http> तत्व (pdSecurity नाम) पर pattern विशेषता का उपयोग: <http pattern='/pdregistration/*'..., और अपने 'defaultSecurity' <http> तत्व से पहले ही चले जाते हैं।

Spring Security docs के अनुसार:

स्प्रिंग सुरक्षा 3.1 से यह अब अलग अनुरोध पैटर्न के लिए अलग सुरक्षा फिल्टर श्रृंखला विन्यास को परिभाषित करने के लिए कई http तत्वों का उपयोग करना संभव है। यदि पैटर्न तत्व http तत्व से छोड़ा गया है, तो यह सभी अनुरोधों से मेल खाता है।

... और कई के बारे में एक और प्रासंगिकता का <http> तत्वों here:

प्रत्येक तत्व आंतरिक FilterChainProxy भीतर एक फिल्टर श्रृंखला और URL प्रतिमान है कि यह करने के लिए मैप किया जाना चाहिए बनाता है। तत्वों को उनके आदेश के क्रम में जोड़ा जाएगा, इसलिए सबसे विशिष्ट पैटर्न को पहले घोषित किया जाना चाहिए।

+0

यह सही काम करता है .... – anshulkatta