Я пытаюсь понять рекомендуемый способ определения Spring Security в приложениях Spring -MVC, где определения bean-компонентов разделены на несколько родительских/дочерних контекстов.
Например, мое текущее приложение web.xml
выглядит следующим образом (, которое я понимаю как довольно стандартное)
contextConfigLocation
classpath:applicationContext.xml
/WEB-INF/securityContext.xml
org.springframework.web.context.ContextLoaderListener
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
spring-mvc
org.springframework.web.servlet.DispatcherServlet
1
spring-mvc
/app/*
Итак, у меня есть стандарт ContextLoaderListener
, определенный в /
, который загружает мои глобальные конфигурации-applicationContext.xml
и securityContext.xml
. Я также определяю Spring MVC DispatcherServlet
в /app/
, который загружает свои собственные bean-компоненты из spring-mvc-servlet.xml
.
Насколько я понимаю, конфигурация, определенная в spring-mvc-servlet.xml
, не видна для конфигурации, определенной в любом из контекстных файлов верхнего -уровня.
Где же тогда лучше всего определять концепции безопасности на уровне приложения -? Например, я хотел бы добавить следующий фильтр.
Это сделано для того, чтобы запросы к /app/oauth/token
проходили через этот фильтр и обрабатывались базовой аутентификацией.
Поскольку это относится непосредственно к приложению Spring -MVC, я изначально определил его в spring-mvc-context.xml
(, поэтому app
исключен из URL-адреса ).
Однако это означает, что он невидим для конфигурации безопасности, определенной в securityContext.xml
, поэтому он игнорируется.
Итак, я перемещаю его на securityContext.xml
, но при этом также должен перемещать все зависимости. Я быстро заканчиваю тем, что перемещаю все до applicationContext.xml
, что оставляет spring-mvc-context.xml
почти пустым.
Это обычное дело? Каково рекомендуемое разделение между тем, что определено в контекстах верхнего -уровня, и тем, что определено в дочерних контекстах?
Учитывая, что spring -mvc определяет ряд контроллеров, которые я хочу пометить как @Secured
, как они будут обрабатываться, если контроллер не виден контексту безопасности?
Нужно ли мне перемещать мой
из servlet.xml
в глобальный applicationContext.xml
? Нужна ли мне дополнительная настройка в spring-mvc-servlet.xml
, чтобы указать ему участвовать в безопасности Spring?
Я прочитал документацию по Spring -MVC , но там очень мало подробностей о том, как это настроить. Кроме того, примеры Spring OAuth , кажется, определяют все в одном файле конфигурации, что не кажется очень реальным -миром и, кажется, противоречит другим примерам, которые я читал.