@RolesAllowed与@PreAuthorize与@Secured
我有一个基本的SpringBoot应用程序。使用Spring
Initializer,嵌入式Tomcat,Thymeleaf模板引擎以及作为可执行JAR文件的软件包。
我想保护控制器:
@Controller@RequestMapping("/company")
@RolesAllowed({"ROLE_ADMIN"})
@PreAuthorize("hasRole('ADMIN')")
@Secured("ADMIN")
public class CompanyController {
}
我知道有不同的选择,但我真的不知道应该使用哪个选项
回答:
回答:
所有的@PreAuthorize
,@RolesAllowed
并@Secured
有注释,允许配置 方法的安全性
。它们既可以应用于单个方法,也可以应用于类级别,在后一种情况下,安全性约束将应用于类中的所有方法。
使用Spring
AOP代理可以实现方法级的安全性。
@PreAuthorize
注解允许使用 Spring Expression Language(SpEL)
指定对方法的访问约束。这些约束是在执行方法之前进行评估的,如果约束不满足,可能会导致方法的执行被拒绝。该@PreAuthorize
注释是Spring安全框架的一部分。
为了能够使用@PreAuthorize
,注释中的 prePostEnabled
属性
@EnableGlobalMethodSecurity
需要设置为true
:
@EnableGlobalMethodSecurity(prePostEnabled=true)
@RolesAllowed
注解起源于JSR-250
Java安全标准。此注释比注释 更受限制 ,@PreAuthorize
因为它 仅支持基于角色的安全性 。
为了使用@RolesAllowed
注释,包含该注释的库必须在类路径中,因为它不是Spring Security的一部分。另外,注释的
jsr250Enabled
属性@EnableGlobalMethodSecurity
需要设置为true
:
@EnableGlobalMethodSecurity(jsr250Enabled=true)
@Secured
注解是 旧版Spring Security 2注解
,可用于配置方法安全性。它不仅支持基于角色的安全性,而且不支持使用Spring Expression
Language(SpEL)指定安全性约束。建议@PreAuthorize
在新应用程序中使用该注释之上的注释。
为支持@Secured
需要在明确启用注释 @EnableGlobalMethodSecurity
使用注释 securedEnabled
属性:
@EnableGlobalMethodSecurity(securedEnabled=true)
哪些安全注释允许使用SpEL
下表显示了可与Spring Security 5一起使用的安全注释中对Spring Expression Language的支持:
╔═════════════════════╦═══════════════════╗║ Security Annotation ║ Has SpEL Support? ║
╠═════════════════════╬═══════════════════╣
║ @PreAuthorize ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PostAuthorize ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PreFilter ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @PostFilter ║ yes ║
╠═════════════════════╬═══════════════════╣
║ @Secured ║ no ║
╠═════════════════════╬═══════════════════╣
║ @RolesAllowed ║ no ║
╚═════════════════════╩═══════════════════╝
以上是 @RolesAllowed与@PreAuthorize与@Secured 的全部内容, 来源链接: utcz.com/qa/418195.html