2010-01-20 14 views
18

निर्दिष्ट करें मैं जेडीबीसी ऑथ का उपयोग कर स्प्रिंग 3 सुरक्षा सेट अप करने की कोशिश कर रहा हूं। सब कुछ ठीक काम कर रहा है जब मैं एक इंटरसेप्ट-यूआरएल में एकाधिक एक्सेस भूमिका निर्दिष्ट करने का प्रयास करता हूं। उदाहरण के लिए मैं भूमिकाओं ROLE_USER और ROLE_ADMIN के साथ किसी के सभी पृष्ठों उपयोग करने में सक्षम होना चाहता हूँ, मैं अपने वसंत कॉन्फ़िग फ़ाइल में follwoing लाइन का उपयोग करें -स्प्रिंग सुरक्षा 3 एकाधिक इंटरसेप्ट-यूआरएल एक्सेस भूमिकाएं

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Unsupported configuration attributes: [ ROLE_ADMIN] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1401) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:289) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:286) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:188) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:558) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:852) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:422) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:516) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
Caused by: java.lang.IllegalArgumentException: Unsupported configuration attributes: [ ROLE_ADMIN] 
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.afterPropertiesSet(AbstractSecurityInterceptor.java:154) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398) 
    ... 27 more 

-

<security:intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN" /> 

हालांकि इस निम्न त्रुटि फेंकता यदि निर्दिष्ट है कि केवल एक भूमिका किसी भी यूआरएल तक पहुंच सकती है तो यह ठीक है (या तो भूमिका के लिए ठीक है)। जिस क्रम में मैं भूमिका निर्दिष्ट करता हूं उसे बदलना कोई फर्क नहीं पड़ता है। ऐसा लगता है कि स्प्रिंग सिक्योरिटी 3 में कुछ बदल गया है जो अब निर्दिष्ट मल्टीप्ल एक्सेस एक्सेस को संभाल नहीं सकता है।

मैंने सफलतापूर्वक स्प्रिंग सिक्योरिटी 2 के साथ काम कर लिया है, और वस्तुतः एक ही कॉन्फ़िगरेशन का उपयोग कर रहा हूं। कोई विचार?

मेरे सुरक्षा कॉन्फ़िग फ़ाइल नीचे सूचीबद्ध है -

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:security="http://www.springframework.org/schema/security" 
     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-3.0.xsd 
       http://www.springframework.org/schema/security 
       http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

    <security:http auto-config="true" access-denied-page="/denied.jsp" >  
     <security:form-login 
      default-target-url="/app/home" 
      always-use-default-target="true" /> 

     <security:intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN" /> 

     <security:logout invalidate-session="true" logout-url="/logout" logout-success-url="" /> 
    </security:http> 

    <security:authentication-manager> 
     <security:authentication-provider> 
      <security:jdbc-user-service data-source-ref="dataSource" 
       users-by-username-query='select "username", "password", "enabled" 
        from users where "username" = ?' 
       authorities-by-username-query='select "username", "authority"      from user_roles where "username" = ?' /> 
     </security:authentication-provider> 
    </security:authentication-manager> 
</beans> 

उत्तर

-2

मैं क्या यह 3 में एक बग था जाँच करने के लिए कुछ और बदले बिना स्प्रिंग सुरक्षा 2.0.5 में डाउनग्रेड करने का फैसला किया है, और यह लो और निहारना था!

मुझे लगता है कि मैं भी यहाँ एक संबंधित खुला बग मिला - https://jira.springsource.org/browse/SEC-1342

समाधान - 2.0.5 का उपयोग करता है, तो इस सुविधा का उपयोग करना चाहते हैं।

45

मैं एक ही मुद्दा था, लेकिन भाव इस्तेमाल किया इस समस्या के समाधान पाने के लिए:

आप अपने मौजूदा config में एम्बेड चाहिए

use-expressions="true" 

। तो:

<security:http auto-config="true" access-denied-page="/denied.jsp" > 

<security:http auto-config="true" access-denied-page="/denied.jsp" use-expressions="true"> 

और हो जाता है तो:

<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" /> 
11

मैं इस समस्या के बारे में निश्चित नहीं हूँ, वास्तव में मैं इसे अपने परियोजना में वर्तमान में उपयोग कर रहा हूँ और एक नहीं दिख रहा है मुद्दा। "," के बाद अंतरिक्ष को हटाने का प्रयास करें, मेरा मतलब है ROLE_USER, ROLE_ADMIN

+3

तेजा आप सही हैं, यह अल्पविराम के बाद रिक्त स्थान को संभाल नहीं सकता है। यह रिक्त स्थान के बिना ठीक काम करता है। – user223695

+0

त्रुटि संदेश यह स्पष्ट करता है कि यह वास्तव में समस्या है: "असमर्थित कॉन्फ़िगरेशन विशेषताएँ: [ROLE_ADMIN]" –

4

का उपयोग करने का प्रयास करें मुझे एक ही समस्या थी और उत्तर here मिला।
<security:intercept-url pattern="/**" access="hasRole('ROLE_USER') and hasRole('ROLE_ADMIN')" />
आप सूचीबद्ध भूमिकाओं में से एक, उपयोग के साथ उपयोगकर्ता को पहुंच प्रदान करना चाहते हैं::
<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />

इसके अलावा, आप प्रयोग करने की क्षमता जोड़ने की जरूरत है
दोनों भूमिकाओं के साथ उपयोगकर्ता को पहुंच प्रदान करने कि लाइन का प्रयोग करें अपनी सुरक्षा * .xml में स्पेल, use-expressions="true" से <http> टैग जोड़ें।

7

मुझे वही समस्या थी जब वसंत 3.x से 4.x तक माइग्रेट करने का प्रयास किया गया था। अंत में मैंने पाया कि "http" टैग का पैरामीटर "उपयोग-अभिव्यक्ति" डिफ़ॉल्ट रूप से झूठ के बजाय वसंत 4.x में "सत्य" बन गया (जैसा कि पुराने संस्करणों में था)।

पीएस यह प्रश्न अब के लिए बहुत पुराना है, लेकिन मुझे यह Google में मिला। तो कोई और इसे भी ढूंढ सकता है और यह जानकारी तब उपयोगी हो सकती है।

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