Sto cercando di capire il modo consigliato per definire Spring Security nelle applicazioni Spring-MVC, in cui le definizioni bean sono suddivise tra più contesti padre/figlio.Spring Security + MVC: domande relative alla definizione del contesto e all'ambito dei bean
Per esempio, il mio attuale dell'applicazione web.xml
appare come segue, (che ho capito di essere abbastanza standard)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
/WEB-INF/securityContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
Così, ho uno standard ContextLoaderListener
definita a /
, che carica i miei file di configurazione globali - applicationContext.xml
e securityContext.xml
. Definisco anche la molla mvc DispatcherServlet
a /app/
, che carica i propri bean da spring-mvc-servlet.xml
.
A quanto ho capito, la configurazione definita in spring-mvc-servlet.xml
non è visibile per la configurazione definita in nessuno dei file di contesto di livello superiore.
Dove si trova il posto migliore per definire i concetti di sicurezza a livello di app? Ad esempio, vorrei aggiungere il seguente filtro.
<security:http pattern="/oauth/token" create-session="stateless" entry-point-ref="oauthAuthenticationEntryPoint">
<security:custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" />
</security:http>
Questo è così che chiede di /app/oauth/token
passare attraverso questo filtro, e vengono elaborati autenticazione di base.
Poiché ciò si riferisce direttamente a un problema dell'app Spring-MVC, inizialmente l'ho definito in spring-mvc-context.xml
(motivo per cui l'app
è escluso dall'URL).
Tuttavia, ciò significa che non è visibile alla configurazione di sicurezza definita in securityContext.xml
, quindi viene ignorata.
Quindi, lo sposto fino a securityContext.xml
, ma nel fare ciò, deve anche spostare tutte le dipendenze. Finisco rapidamente a spostare tutto fino a applicationContext.xml
, che lascia lo spring-mvc-context.xml
quasi vuoto.
È comune? Qual è la divisione consigliata tra ciò che viene definito nei contesti di primo livello e ciò che viene definito nei contesti figlio?
Dato che spring-mvc definisce una serie di controller, che desidero contrassegnare come @Secured
, come verranno elaborati se il controller non è visibile nel contesto di sicurezza?
Devo spostare il mio <mvc:annotation-driven />
da servlet.xml
a quello globale applicationContext.xml
? Ho bisogno di una configurazione aggiuntiva all'interno dello spring-mvc-servlet.xml
per dirgli di partecipare alla sicurezza di Spring?
Ho letto il documentation on Spring-MVC, ma ci sono pochissime specifiche su come configurarlo. Inoltre, lo Spring OAuth examples sembra definire tutto all'interno di un singolo file di configurazione, che non sembra molto realistico, e sembra contraddire altri esempi che ho letto.