Spring Security - глобальный метод безопасности - PullRequest
2 голосов
/ 12 октября 2011

Я определил функцию в основном файле конфигурации webappcontext.Этот файл также содержит элемент, который сканирует все пакеты, кроме классов контроллера.Отдельный контекстный файл диспетчера-сервлета сканирует пакет контроллера.Если я применяю безопасность на уровне методов к методам контроллера, которые обслуживают запросы, это не работает.Это работает, только если я явно упомяну этот элемент в dispatcher-servlet.

Из моего предыдущего вопроса на этом форуме я понимаю, что контекст dispatcher-servlet является потомком основного контекста webapp.В этом случае диспетчер-сервлет должен забрать этот элемент из родительского права?

1 Ответ

2 голосов
/ 05 июля 2012

См. Spring Security FAQ (выделено мной). Если вы применяете pointcut для сервисного слоя, вам нужно только установить <global-method-security> в контексте безопасности вашего приложения.

В веб-приложении Spring контекст приложения, который содержит Spring MVC bean-компоненты для сервлета-диспетчера часто отделены от основной контекст приложения. Это часто определяется в файле с именем myapp-servlet.xml, где «myapp» - это имя, присвоенное Spring DispatcherServlet в web.xml. Приложение может иметь несколько DispatcherServlets, каждый со своим собственным изолированным контекстом приложения. Бобы в этих «дочерних» контекстах не видны остальным приложение. «Родительский» контекст приложения загружается ContextLoaderListener вы определяете в вашем web.xml и видны всем ребенок контексты. Этот родительский контекст обычно там, где вы определяете Ваша конфигурация безопасности, включая элемент). В результате любые ограничения безопасности применяются к методам в эти веб-компоненты не будут применены, так как компоненты не будут видны из контекста DispatcherServlet. Вам нужно либо переместить объявление в веб-контексте или переместил bean-компоненты, которые вы хотите защитить в основном контексте приложения.

Как правило, мы рекомендуем применять метод безопасности на службе слой, а не на отдельных веб-контроллерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...