使用@PreAuthorize 的多个角色

P R*_*esh 9 spring-security jhipster

检查多个角色是否具有方法级别访问权限

我已经使用@PreAuthorize 注释来检查角色

@PreAuthorize("hasRole(\"" + AuthoritiesConstants.USER + "\",)" )

如何使用@PreAuthorize annotaion 检查多个角色?

小智 16

您可以创建自定义注释来验证许多角色和条件。佩:

@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole(T(com.bs.dmsbox.api.constants.RoleConstants).ROLE_AGENT) " +
        "|| hasRole(T(com.bs.dmsbox.api.constants.RoleConstants).ROLE_ADMIN)" +
        "|| (hasRole(T(com.bs.dmsbox.api.constants.RoleConstants).ROLE_CUSTOMER) && #userId == principal.username)")
public @interface IsAuthenticatedAsAgentOrCustomerIsUserId {
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此注释,如下所示:

@IsAuthenticatedAsAgentOrCustomerIsUserId
Folder findByUserIdAndType(@Param("userId") String userId, @Param("typeId") FolderType id);
Run Code Online (Sandbox Code Playgroud)

此注释验证用户以角色 AGENT 或 ADMIN 登录。如果用户具有角色 CUSTOMER 验证userId参数是否等于用户登录


Nik*_*nko 8

只需使用&&||在 SpEL 表达式中组合角色

@PreAuthorize("hasRole('" + AuthoritiesConstants.USER + "')" +
              " && hasRole('" + AuthoritiesConstants.ADMIN + "')" )
Run Code Online (Sandbox Code Playgroud)


Ole*_*iun 7

@PreAuthorize("hasAnyRole('ROLE_ADMIN', 'ROLE_USER')")

hasAnyRole() 

When you need to support multiple roles, you can use the hasAnyRole() expression.

@PreAuthorize("hasAnyRole('ADMIN','DB-ADMIN')")
Run Code Online (Sandbox Code Playgroud)

https://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html https://www.appsdeveloperblog.com/spring-security-preauthorize-annotation-example/

  • 虽然此代码可以回答这个问题,但最好在此处包含任何参考、建议和指南。仅代码答案提供了解决方案,但并不是真正的答案。 (2认同)