2013-06-04 21 views
7

Çocuk bağlamında yay güvenlik içeriğine sahip olmaya çalışıyorum, bu nedenle sunucu içeriği dosyasında URL güvenliği olabilir.Çocuk bağlamında yay güvenlik içeriği nasıl oluşur

ben: yaylı-security.xml ile Web.xml, genel güvenlik yapılandırmasına

<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> 

ve myapp sabun-servlet.xml üzerinde

<!-- 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"/> 

. İşe ama yay güvenlik kök bağlam yapılandırmasına <security:http> bölümünü taşırsanız, Ancak

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 

ile başarısız değil, her şey çalışıyor. Denemeye çalışmamalı mıyım? Çocuğum bağlamında URL tabanlı güvenliği nasıl alabilirim?

Ayrıca, bağlam dosyalarını bir araya getirmeyi denedim, ancak aynı sorun ortaya çıkıyor gibi görünüyor.

+0

Eğer yay security.xml yay tarafından alınan emin misiniz "Nasıl çocuk bağlam olarak yay güvenlik bağlamı olması"? –

+0

@MaksymDemidas evet, 'http 'bölümünün taşınması, kullanılan tüm yönergelerin kullanılmasında, hem ebeveyn hem de çocuk bağlamında – eis

cevap

17

DelegatingFilterProxy orada bütün <http> yapılandırmayı yerleştirmeniz gerekir varsayılan olarak gelir kök ApplicationContext varsayılan görünüm eseri (springSecurityFilterChain yaratan şeydir) olacaktır. Ancak, kullanmak için contextAttribute belirtilerek DelegatingFilterProxy'un farklı bir ApplicationContext kullanımını belirtebilirsiniz. Bahar Güvenliği kullanan

<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> 

benzer bir örnek aşağıda gösterildiği gibi bu güncellemeyi sizin web.xml yapmak için 3.2 + 'nın AbstractSecurityWebApplicationInitializer aşağıda görülebilir: o adını değiştirir çünkü

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"; 
    } 

} 

Bu işleri DelegatingFilterProxy'un ApplicationContext'u aramak için kullandığı ServletContext özniteliği. Root ApplicationContext köprüsünü keşfeden varsayılan değeri kullanmak yerine, şimdi MessageDispatcherServlet ürününüzün kullandığı özniteliği kullanır (bu nedenle alt bağlamı işaret eder). MessageDispatcherServlet sitesindeki (veya FrameworkServlet örneğin DispatcherServlet olarak herhangi bir alt sınıfı) <servlet-name> sunucu uygulaması adıdır özelliği, adı "org.springframework.web.servlet.FrameworkServlet.CONTEXT." + <servlet-name> kullanılarak ServletContext içinde ApplicationContext depolar

not edin. Bu durumda, yapılandırılması gereken özellik org.springframework.web.servlet.FrameworkServlet.CONTEXT.myapp-soap olur. from myapp-soap sunucu adını spring-servlet olarak değiştirdiyseniz, bunun yerine org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring-servlet kullanırsınız.Ben tabi okumak gerektiğini düşünüyorum

PS

+0

vay, tam olarak neye ihtiyacım var gibi geliyor. Bunu deneyeceğim ve sonuçlarla geri döneceğim. – eis

+0

bir çekicilik gibi çalışır. – eis

2

<security:http> bu güvenlik ad eleman ana bağlamda DelegatingFilterProxy tarafından aranır springSecurityFilterChain fasulye, oluşturduğundan, yerine çocuk (servlet) bağlamın ana uygulama bağlamında gitmek zorunda kalacaktır. Bunu javadoc açıkça belirtmektedir gibi:

web.xml genellikle Spring'in kök uygulama bağlamında bir fasulye ismine karşılık gelen belirtilen filter-name bir DelegatingFilterProxy tanımı, ihtiva edecektir.

İlgili konular