Spring Security / AspectJ pointcut - PullRequest
       5

Spring Security / AspectJ pointcut

0 голосов
/ 09 ноября 2011

Можно ли защитить мои классы @Controller с помощью pointcut?Я попытался:

<global-method-security pre-post-annotations="enabled">
    <!-- Block anything ending with the word 'Controller'-->
    <protect-pointcut expression="execution(* my.pkg.*Controller.*(..))" access="NON_EXISTANT_ROLE"/>
</global-method-security>

Теоретически, я никогда не смогу поразить контроллер, потому что роль не существует ни для какого пользователя.Тем не менее, контроллер работает нормально.

1 Ответ

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

См. Spring Security FAQ (выделено мной).

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

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

Если вы применяете pointcut к сервисному слою, вам нужно только установить <global-method-security> в контексте безопасности вашего приложения.

...