Может ли кто-нибудь использовать преимущества аннотаций PreAuthorize для обеспечения безопасности весной? - PullRequest
3 голосов
/ 08 февраля 2012

Например:

@PreAuthorize("hasRole('admin') && hasPermission('save', #user)")
void updateUser(User user) {
  // some code
}

И некоторые примеры реализации без PreAuthorize.

void updateUser(User user) {
  Security.hasRole(Roles.ADMIN);
  Security.hasPermission(Permission.SAVE, user);
  // some code
}

Второй пример более прост для понимания.Может быть реорганизован IDE (переименовать роль или найти все виды использования ролей).Проверка кода во время компиляции.Работай быстрее.И, возможно, другие преимущества.

Почему разработчики Spring-Security выбрали аннотации и SpEL?Может кто-нибудь объяснить это?

Только одна причина, которую я могу найти - более легкий доступ к ApplicationContext.Но, насколько я понимаю, Spring Security в любом случае работает через синглтон SecurityContextHolder.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Самое большое преимущество (с моей точки зрения) заключается в том, что его можно легко деактивировать (или, вернее, не активировать) в тесте.

Таким образом, я могу написать свои тесты (модульный тест, функциональный тест)....), не обращая внимания на охрану.Чтобы тесты могли сконцентрироваться на функции, которую они хотят тестировать.

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

1 голос
/ 06 октября 2012

В дополнение к ответу @Ralph я бы добавил еще пару преимуществ.

  1. @ PreAuthorize (& co.) Мета-аннотирован @Documented, это означает, что аннотация будет отображаться в Javadocs защищенного метода. Читатель вашей документации сразу же узнает, что метод защищен и при каких условиях.

  2. Поскольку он мета-аннотирован с помощью @Inherited, вы можете добавить @PreAuthorize к родительскому классу и автоматически обеспечить защиту всей иерархии без реализации какого-либо дополнительного шаблона.

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