@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

回到顶部