Защищенные аннотации в весенней безопасности - PullRequest
3 голосов
/ 11 февраля 2012

Я пытаюсь настроить аннотации безопасности в весенней безопасности.Но у меня есть вопрос по этому поводу -

....
<security:http auto-config="true" use-expressions="true">
....

, и когда я использую

@Secured("CUSTOM_ACCESS")
public String query();

, это не работает.Но я использую

@PreAuthorize("hasRole('CUSTOM_ACCESS')")
public String query();

, он работает правильно и применяет соответствующую роль.Означает ли это, что аннотации @Secured не работают с @PreAuthorize?

Я также пытался добавить

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

Но это не помогает.

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

выше конфиг работает нормально.Есть идеи?

1 Ответ

8 голосов
/ 11 февраля 2012

Прежде всего, настройка use-expressions в элементе <http> не влияет на аннотации безопасности метода. Они включаются с помощью global-method-security.

Использование

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

включит PreAuthorize и связанные с ним аннотации. Причина, по которой защищенная аннотация не работает при включении, заключается в том, что нет избирателя, который знает, что означает CUSTOM_ACCESS. В настройках по умолчанию RoleVoter Spring Security использует только те атрибуты, которые начинаются с префикса ROLE_. См. этот FAQ для получения дополнительной информации.

Избиратели могут использоваться не для проверки простых ролей, а для других целей, поэтому им обычно требуется какой-то способ определить, какие из атрибутов, настроенных для метода, применяются к ним. Аннотации на основе выражений работают не так, как обычные избиратели. Выражение hasRole просто ищет именованный орган, который назначен пользователю.

Таким образом, если вы создали AccessDecisionManager для обеспечения безопасности метода с AccessDecisionVoter, который использует ваш атрибут CUSTOM_ACCESS, тогда аннотация @Secured будет иметь эффект. Однако, поскольку он уже работает с PostAuthorize, вы можете просто придерживаться этого.

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