2009-07-01 19 views
9

Uygulamamın esnek kısmı için PreAuthenticatedProcessingFilterEntryPoint kullanan bir güvenlik içeriği tanımım var. Uygulamamın başka bir bölümü için html formlarıyla standart form girişini kullanacak başka bir tanıma nasıl sahip olabilirim? İşte şu anda ne var: Ben yapmak istiyorum neYay güvenliği ile birden çok güvenlik içeriğim olabilir mi?

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


    <http auto-config="true" access-denied-page="/admin/access-denied"> 
     <intercept-url pattern="/admin/login*" filters="none"/> 
      <intercept-url pattern="/admin/access-denied" filters="none"/> 
     <intercept-url pattern="/admin/**/*" access="ROLE_ADMIN" /> 
     <form-login login-page="/admin/login" authentication-failure-url="/admin/login?login_error=1" 
      default-target-url="/admin/index" login-processing-url="/admin/login-process"/> 
     <logout logout-success-url="/admin/login"/> 

    </http> 

<global-method-security jsr250-annotations="enabled" /> 

    <beans:bean id="preAuthenticatedEntryPoint" class="org.springframework.security.ui.preauth.PreAuthenticatedProcessingFilterEntryPoint" > 
    </beans:bean> 


    <beans:bean id="userAccountManager" class="com.mycomp.service.managers.jpa.UserAccountJpaManager" /> 
    <beans:bean id="userService" class="com.mycomp.auth.DefaultUserDetailsService" /> 
    <beans:bean id="defaultPasswordEncoder" class="com.mycomp.auth.DefaultPasswordEncoder" /> 

    <authentication-provider user-service-ref="userService"> 
     <password-encoder ref="defaultPasswordEncoder"/> 
    </authentication-provider> 


</beans:beans> 

yöneticisinin sitede bulunan URL'ler için başka bir kimlik doğrulama sağlayıcısını kullanmak olduğunu, Şu anda var bir esnek uygulama içindir. Bu yüzden yönetici URL'lerinin güvenliğini başka bir userDetailsService fasulyesi kullanmasını istiyorum.

+0

Bende aynı sorun var ... bu nasıl sonuçlandı? – HDave

+0

@HDave Bahar güvenliği ile ilgili sorunun nasıl sonuçlandığından emin değilim (her nasılsa bir şekilde çözdüğümü çözdüğümü düşünüyorum), ama sonunda bir java yönetici arayüzü fikrini bıraktım ve Jython'da tamamen reddediyorum. Projenin çoğu arka ucunu bitirmek için proje bu şekilde gitti. – Vasil

cevap

0

Uygulamanızın bazı bölümlerinin Spring Security filtre zinciri tarafından nasıl ele geçirildiği ile ilgilidir.

<intercept-url pattern="/**" ...> 

Sen (farklı yapılandırmalar kullananların aka farklı bölümleri farklı kesişme desenleri sahip olabilir: bir kesişme regex böyle olduğu yerde xml yapılandırma (basit etiket yapılandırması yaptım olmadığını bağlı olarak) güvenlik filtresi zinciri). Mevcut yapılandırmanızı xml gönderirseniz size daha somut bir cevap verebilirim.

DÜZENLEME: Şu anda Spring Security yapılandırmanızı tanımlamak için http etiketini kullanıyorsunuz. Bu etiket bir kısayol/yardımcı olarak kullanılır ve otomatik olarak elle ayarlanabilen Güvenlik Filtresi zincirinin birçok parçasını tanımlar. Kullanım durumunuzun otomatik kurulum paradigmasına uymadığını düşünüyorum, bu yüzden farklı URL kalıpları için filtre zincirini manuel olarak ayarlamanız gerekecek (benimki altımda görüldüğü gibi). Kendi PreAuthenticationFilter'ınızı oluşturabilir (bu, özel bir UserDetailsService alır) ve uygun olduğunda, filtre zincirinizdeki eşleme eşlemesini ekleyebilir.

+0

Güvenlik bağlamı yapılandırmamı gönderdim. Bana yardım edersen memnun olurum. – Vasil

2

Harita diferent URL kalıbına her filtre zinciri:

<bean id="myfilterChainProxy" 
    class="org.springframework.security.util.FilterChainProxy"> 
    <security:filter-chain-map pathType="ant"> 
    <security:filter-chain pattern="/flex" filters="filterF"/> 
    <security:filter-chain pattern="/**" filters="filter1,filter2,filter3"/> 
    </security:filter-chain-map> 
</bean> 
+0

Sanırım yapmam gereken şey bu. Bununla birlikte, yalnızca bir özel kimlik doğrulama sağlayıcısıyla bir filtre tanımlamanın en kolay yolunun ne olduğunu bilmiyorum. – Vasil

12

yakın zamana kadar yapmak zor olmuştur, ama şimdi o kolay!

Spring Security, 3.1 sürümündeki senaryo için destek ekledi. Şu anda SEC-1171 tarafından uygulanan bir Sürüm Adayı olarak mevcuttur. Sözdiziminin ayrıntıları 3.1 ile verilen kılavuzda yer almaktadır.

Kullanımı oldukça basit. Temel olarak, her içerik için bir tane olan Spring Security yapılandırmanızda birden fazla http öğesini tanımlarsınız. Biz bunu böyle kullanıyoruz:

<!-- Configure realm for system administration users --> 
<security:http pattern="/admin/**" create-session="stateless"> 
    <security:intercept-url pattern='/**' access='ROLE_ADMIN' requires-channel="https" /> 
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" /> 
</security:http> 


<!-- Configure realm for standard users --> 
<security:http auto-config="true" access-denied-page="/error/noaccess" use-expressions="true" create-session="ifRequired"> 
    <security:form-login 
      ... 
      ... 
</security:http> 

nota önemli şey ilk http elemana pattern="/admin/**" olduğunu. Bu, Spring'e, /admin kapsamındaki tüm URL'lerin varsayılan bağlam yerine söz konusu içeriğe tabi olduğunu bildirir ve bu nedenle /admin altındaki URL'ler bunun yerine önyargı filtresini kullanır.

+0

Merhaba, çoklu 'http' öğeleri kullanırken aynı problemim var.Ben farklı desenlerle eşlenmiş var ve hala güvenlik alemleri ('' 'elemanları) arasında' SecurityContext' paylaştık. –

İlgili konular