2009-07-01 28 views
9

Ho una definizione del contesto di sicurezza che utilizza PreAuthenticatedProcessingFilterEntryPoint per la parte flessibile della mia applicazione. Come posso avere un'altra definizione che userà il login standard per i moduli con i moduli html per un'altra parte della mia applicazione? Ecco quello che ho attualmente:Posso avere più contesti di sicurezza con sicurezza Spring?

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

Quello che mi piacerebbe fare è usare un altro provider di autenticazione per gli URL che sono l'amministratore del sito, quella che ho attualmente è per l'applicazione Flex. Quindi voglio la sicurezza per gli admin admin di usare un altro bean UserDetailsService.

+0

Ho lo stesso problema ... come è finito? – HDave

+0

@HDave Non sono sicuro di come sia finito il problema relativo alla sicurezza di primavera (anche se penso di averlo risolto in qualche modo vedere le risposte di seguito), ma alla fine ho abbandonato l'idea di un'interfaccia di amministrazione java e l'ho rifatta completamente in Jython nel La fine della maggior parte del back-end dell'applicazione per il progetto è andata in questo modo. – Vasil

risposta

0

Si tratta di parti dell'intera applicazione intercettate dalla catena di filtri Spring Security. Da qualche parte nella configurazione XML (a seconda se avete fatto la semplice etichetta di configurazione o meno) c'è un espressione regolare intercetta come questo:

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

Si possono avere diversi modelli di intercettazione che utilizzano diverse configurazioni (aka diverse parti del la catena del filtro di sicurezza). Potrei darti una risposta più concreta se pubblichi il tuo attuale xml di configurazione.

MODIFICA: Attualmente si utilizza il tag http per definire la configurazione di Spring Security. Questo tag è usato come un collegamento/helper e definisce automaticamente molti pezzi della catena del filtro di sicurezza che possono anche essere impostati manualmente. Penso che il tuo caso d'uso non si adatti al paradigma della configurazione automatica, quindi dovrai configurare manualmente la catena di filtri per i diversi pattern URL (come mostrato nel post sotto il mio). È possibile creare il proprio PreAuthenticationFilter (che prenderà un UserDetailsService personalizzato) e aggiungerlo, se del caso, alla mappatura dell'intercettazione della catena di filtri.

+0

Ho pubblicato la mia configurazione del contesto di sicurezza. Sarei grato se mi puoi aiutare con questo. – Vasil

2

Mappa ogni catena filtro a un modello di spettacolo diverso URL:

<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

Suppongo che questo sia quello che devo fare. Tuttavia, non so quale sia il modo più semplice per definire un filtro con un solo provider di autenticazione personalizzato. – Vasil

12

E 'stato difficile da fare fino a poco tempo fa, ma ora è facile!

Spring Security ha aggiunto il supporto per lo scenario nella versione 3.1. È attualmente disponibile come Release Candidate, implementato da SEC-1171. I dettagli della sintassi sono nel manuale incluso in 3.1.

È piuttosto semplice da usare. Fondamentalmente si definiscono più elementi http nella configurazione di Spring Security, uno per ogni contesto. Noi stiamo usando in questo modo:

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

La cosa fondamentale da notare è la pattern="/admin/**" sul primo elemento http. Ciò indica a Spring che tutti gli URL sotto /admin sono soggetti a tale contesto anziché al contesto predefinito, pertanto gli URL in /admin utilizzano invece il filtro di preautorizzazione.

+0

Ciao, ho lo stesso problema durante l'utilizzo di più elementi 'http'.L'ho mappato con modelli diversi e ho ancora condiviso 'SecurityContext' tra gli ambiti di sicurezza (' elementi http'). –

Problemi correlati