Spring Security 3: @PostFilter не работает - PullRequest
0 голосов
/ 17 января 2011

Привет, я новичок в Spring Security 3 и пробовал @PostFilter на метод, объявленный в интерфейсе, но возвращаемая коллекция не фильтруется.

Вот код:

public interface IProductService {

 @PostFilter("(!filterObject.customersOnly) or (filterObject.customersOnly and hasRole('ROLE_USER'))")
 Collection<Category> getCategories();
}

customerOnly - логический атрибут в категории объекта домена.

Я добавил следующий элемент в xyz-security.xml:

<global-method-security pre-post-annotations="enabled" />

Может ли кто-нибудь помочь мне понять, что мне не хватает?

Спасибо

1 Ответ

0 голосов
/ 21 марта 2011

Типичные причины этого:

  1. JAR AspectJ и / или CGLIB не находятся в вашем пути к классам.
  2. У вас есть аннотация на интерфейсе ИЛИ на классе (просмотрите документы Spring AOP , чтобы определить, какая поддержка для какой реализации AOP поддерживается).
  3. Вы добавили конфигурацию Spring Security в другой ApplicationContext, в котором вы объявили свои защищенные bean-компоненты (например, вы пытаетесь защитить bean-компонент в файле * -servlet.xml, когда ваша конфигурация Spring Security объявлена ContextLoaderListener).
  4. Вы удалили или изменили объявление, чтобы аннотированный компонент не обрабатывался тем же ApplicationContext, в котором настроена Spring Security.

Если ни одно из этих предложений не применимо, включите ведение журнала DEBUG и просмотрите запуск приложения, чтобы увидеть, обрабатывается ли аннотация bean-компонента вообще.

Кроме того, у меня было много читателей, сообщавших о похожих вариантах этой проблемы - исходный код для этого примера действительно работает, но во всех случаях верно, что читатели впоследствии изменили один из вышеуказанных 4 пунктов, вызывая пример кода для «взлома»;)

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