Вопрос по spring-security – Используйте статическое плетение с пружинной защитой

2

Коллеги по работе,  ввесенняя документация по безопасности Я встретил следующее понятие:

If you want to secure instances which are not created by Spring (using the new operator, for example) then you need to use AspectJ.

Кто-нибудь может показать мне работоспособный пример такого использования. Наилучший случай, если это сделано с помощью статического плетения.

Заранее спасибо!

@Marc не понимает, какова связь между консолью RAD и чисто техническим вопросомhow to do smth... Dewfy
Я не знаю точно, как это сделать, поэтому я не опубликовал фактический "ответ". Я говорю вам, как вы можете получить хороший пример, и это будет использовать Roo для быстрой генерации вашего собственного рабочего сконфигурированного примера AspectJ, который следует стандартным рекомендуемым Spring соглашениям. И тогда вы могли бы изучить его в каком-то направлении. Если вам не нравится это предложение, вы можете смело ждать лучшего ОТВЕТА. Marc
Spring Roo прекрасно интегрирует AspectJ в стандартный макет проекта Spring. Spring Security легко интегрируется в это. Не уверен, что мое предложение соответствует вашим потребностям, но вы можете собрать пример проекта Roo, чтобы увидеть, как они все играют вместе. Marc
Хорошо. Мой единственный опыт использования AspectJ связан с Roo, поэтому я подумал, что, возможно, это поможет вам получить чистый пример. Похоже, вы ищете что-то более конкретное, так что мне жаль, если я сбил вас с пути. Marc
@Marc выглядит так, как будто Roo использует «стандарт»; подход - когда бин разрешен из весеннего контекста, но не сnew operator Dewfy

Ваш Ответ

1   ответ
3

Образец аспекта в кодовой базе Spring Security. Это компилируется противspring-security-aspects модуль, а затем использует:

<global-method-security secured-annotations="enabled" mode="aspectj" />

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

Если вы хотите знать, какspring-security-aspects работает, проверьтеисточник аспекта.

Я только что взял последнюю версию 3.1 Spring Security, только что скопировал AnnotationSecurityAspectTests в мой проект. Все тесты не пройдены, поэтому LTW не был применен. Я поместил мой примерdl.dropbox.com/u/71145662/ssec.zip , Просто для примера - если вы раскомментируете app.SAspect, то, по крайней мере, cont.SecuredAction среагирует и отключит аннотированный метод @Secured Dewfy
@LukeTaylor, ссылка для примера AspectJ теперь дает 404 - и было бы полезно иметь, если есть обновленный адрес.
@ Luke_Taylor это здорово, что именно ты отвечаешь на это. Вчера я проводил много времени, уставившись на твой код / тест весной. Позвольте мне уточнить вопрос: когда я собираю компонент сajc и декомпилировать его обратно, я не вижу изменений, которые должны соответствоватьprivate pointcut executionOfPrePostAnnotatedMethod() : execution(* *(..)) && (@annotation(PreAuthorize), Применение моего собственного аспекта работает хорошо. Dewfy
также моя весна мешает мне указатьmode="aspectj" Dewfy
Вы не сказали, какую версию вы используете.mode="aspectj" доступно в текущих второстепенных версиях 3.0 и 3.1. Я не могу комментировать то, как вы используетеajc и ваши наблюдения с ним - я не знаю, что там происходит. Пример, на который я вам указал, должен обеспечить хорошую отправную точку для построения рабочего кода, который компилируется с использованием модуля аспектов с использованиемajc, Я бы попробовал добавить к этому ваши классы и добавить другой тестовый метод JUnit, используя ваш код.

Похожие вопросы