Ответ 1
Аннотации безопасности
Все @PreAuthorize
, @RolesAllowed
и @Secured
являются аннотациями, которые позволяют настроить безопасность метода. Они могут применяться как к отдельным методам, так и на уровне класса, в последнем случае ограничения безопасности будут применяться ко всем методам в классе.
Безопасность на уровне метода достигается с помощью прокси Spring AOP.
@PreAuthorize
@PreAuthorize
аннотация позволяет указать ограничения доступа к методу, использующему язык выражений Spring (SpEL). Эти ограничения оцениваются перед выполнением метода и могут привести к тому, что выполнение метода будет отклонено, если ограничения не будут выполнены. Аннотация @PreAuthorize
является частью среды Spring Security.
Чтобы иметь возможность использовать @PreAuthorize
, атрибут prePostEnabled
в
@EnableGlobalMethodSecurity
аннотация должна быть установлена на true
:
@EnableGlobalMethodSecurity(prePostEnabled=true)
@RolesAllowed
@RolesAllowed
аннотация берет свое начало в стандарте безопасности Java JSR-250. Этот
аннотация более ограничена, чем аннотация @PreAuthorize
, поскольку она поддерживает только безопасность на основе ролей.
Чтобы использовать аннотацию @RolesAllowed
, библиотека, содержащая эту аннотацию, должна находиться в пути к классам, поскольку она не является частью Spring Security. Кроме того, для атрибута jsr250Enabled
аннотации @EnableGlobalMethodSecurity
необходимо установить значение true
:
@EnableGlobalMethodSecurity(jsr250Enabled=true)
@Secured
@Secured
аннотация - это устаревшая аннотация Spring Security 2, которую можно использовать для настройки безопасности метода. Он поддерживает не только безопасность на основе ролей, но и не поддерживает использование Spring Expression Language (SpEL) для определения ограничений безопасности. Над этой аннотацией рекомендуется использовать аннотацию @PreAuthorize
в новых приложениях.
Поддержка аннотации @Secured
должна быть явно включена в
@EnableGlobalMethodSecurity
аннотация с использованием атрибута securedEnabled
:
@EnableGlobalMethodSecurity(securedEnabled=true)
Какие аннотации безопасности позволяют использовать SpEL
В следующей таблице показана поддержка Spring Expression Language в аннотациях безопасности, которые можно использовать с Spring Security 5:
╔═════════════════════╦═══════════════════╗
║ Security Annotation ║ Has SpEL Support? ║
╠═════════════════════╬═══════════════════╣
║ @PreAuthorize ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PostAuthorize ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PreFilter ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PostFilter ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @Secured ║ no ║
╠═════════════════════╬═══════════════════╣
║ @RolesAllowed ║ no ║
╚═════════════════════╩═══════════════════╝