2013-06-04 5 views
7

मैं बाल संदर्भ में वसंत सुरक्षा संदर्भ रखने की कोशिश कर रहा हूं, इसलिए मुझे सर्वलेट संदर्भ फ़ाइल पर यूआरएल सुरक्षा हो सकती है।बाल संदर्भ में वसंत सुरक्षा संदर्भ कैसे प्राप्त करें

मेरे पास है:

<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> 
    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     classpath:/spring-security.xml 
    </param-value> 
    </context-param> 
    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
    <servlet-name>myapp-soap</servlet-name> 
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>transformWsdlLocations</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    </servlet> 

web.xml, वसंत-security.xml पर सामान्य सुरक्षा विन्यास पर और

<!-- Authorization configurations --> 
<security:http auto-config="false" use-expressions="true" 
    create-session="never" 
    authentication-manager-ref="authenticationManager" 
    entry-point-ref="authenticationEntryPoint"> 

    <security:custom-filter 
     position="PRE_AUTH_FILTER" ref="serviceAuthenticationFilter"/> 

    <security:intercept-url 
     pattern="/GetForbiddenUrl" access="hasRole('roleThatDoesntExist')" /> 
    <security:intercept-url pattern="/**" access="permitAll" /> 
</security:http> 
<!-- annotation security --> 
<security:global-method-security pre-post-annotations="enabled"/> 
MyApp-साबुन servlet.xml पर

। यह काम नहीं करता है, लेकिन

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/my-app/v1/soap]] (ServerService Thread Pool -- 192) JBWEB000284: Exception starting filter springSecurityFilterChain: 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined 

के साथ विफल हालांकि, अगर मैं वसंत-सुरक्षा जड़ संदर्भ विन्यास को <security:http> हिस्सा ले जाते हैं, सब कुछ काम करता है। क्या मैं कोशिश करने के तरीके को काम नहीं करना चाहिए? मैं अपने बच्चे के संदर्भ में यूआरएल-आधारित सुरक्षा कैसे प्राप्त कर सकता हूं?

मैंने संदर्भ फ़ाइलों को एक में जोड़ने का भी प्रयास किया, लेकिन एक ही समस्या उत्पन्न होती है।

+0

आप सुनिश्चित करें कि आपके वसंत-security.xml वसंत द्वारा उठाया जाता है कर रहे हैं "कैसे बच्चे को संदर्भ के रूप में वसंत सुरक्षा संदर्भ के लिए"? –

+0

@MaksymDemidas हाँ, जाने के रूप में 'http' सभी निर्देशों में भाग परिणाम इस्तेमाल किया जा रहा है, दोनों parnt और बच्चे संदर्भ में – eis

उत्तर

17

DelegatingFilterProxy जाएगा जड़ ApplicationContext जो डिफ़ॉल्ट आप आपकी <http> विन्यास डालने की आवश्यकता से मतलब है में डिफ़ॉल्ट रंग-रूप से (यह क्या springSecurityFilterChain बनाता है)।

हालांकि, आप उपयोग करने के लिए संदर्भ एट्रिब्यूट निर्दिष्ट करके DelegatingFilterProxy एक अलग ApplicationContext का उपयोग निर्दिष्ट कर सकते हैं। नीचे के रूप में

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>contextAttribute</param-name> 
     <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.myapp-soap</param-value> 
    </init-param> 
</filter> 

ऐसा ही एक उदाहरण दिखाया गया स्प्रिंग सुरक्षा का उपयोग कर इस अद्यतन अपने web.xml ऐसा करने के लिए 3.2 + के AbstractSecurityWebApplicationInitializer नीचे देखा जा सकता है:

public class SecurityApplicationInitializer extends 
     AbstractSecurityWebApplicationInitializer { 

    @Override 
    protected String getDispatcherWebApplicationContextSuffix() { 
     // NOTE: if you are using AbstractDispatcherServletInitializer or 
     // AbstractAnnotationConfigDispatcherServletInitializer You probably 
     // want this value to be "dispatcher" 
     return "myapp-soap"; 
    } 

} 

यह काम करता है क्योंकि यह के नाम को संशोधित करता है ServletContext विशेषता DelegatingFilterProxyApplicationContext देखने के लिए उपयोग करता है। रूट ApplicationContext को डिफॉल्ट करने वाले डिफ़ॉल्ट मान का उपयोग करने के बजाय अब यह उस विशेषता का उपयोग करता है जो आपके MessageDispatcherServlet का उपयोग कर रहा है (इस प्रकार बच्चे के संदर्भ को इंगित करता है)।

ध्यान दें कि MessageDispatcherServlet के (या FrameworkServlet ऐसे DispatcherServlet रूप से किसी उपवर्ग) ServletContext में ApplicationContext संग्रहीत करता विशेषता नाम "org.springframework.web.servlet.FrameworkServlet.CONTEXT." + <servlet-name> जहां <servlet-name> सर्वलेट का नाम है का उपयोग कर। तो इस उदाहरण में, विशेषता जो कॉन्फ़िगर किया जाना चाहिए org.springframework.web.servlet.FrameworkServlet.CONTEXT.myapp-soap है। यदि आपने सर्वलेट-नाम from myapp-soap से spring-servlet बदल दिया है, तो आप इसके बजाय org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring-servlet का उपयोग करेंगे।

पुनश्च मुझे लगता है कि इस विषय को पढ़ना चाहिए

+0

वाह, वास्तव में लगता है कि मैं क्या जरूरत है। मैं कोशिश करूँगा और परिणामों के साथ वापस आऊंगा। – eis

+0

एक आकर्षण की तरह काम करता है। – eis

2

<security:http>, बच्चे (सर्वलेट) संदर्भ के बजाय मुख्य आवेदन संदर्भ के लिए जाने की वजह से इस सुरक्षा नाम स्थान तत्व springSecurityFilterChain सेम, जो मुख्य संदर्भ में DelegatingFilterProxy द्वारा देखा जाता है बनाता होगा। इसके जावाडोक के रूप में स्पष्ट रूप से कहा गया है:

web.xml आम तौर पर एक DelegatingFilterProxy परिभाषा निर्दिष्ट filter-name साथ वसंत के जड़ आवेदन संदर्भ में एक सेम नाम करने के लिए इसी शामिल होंगे।

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