spring-security 使用@预授权的多个角色

jm2pwxwz  于 2022-11-11  发布在  Spring
关注(0)|答案(4)|浏览(162)

检查多个角色是否具有方法级访问权限
我已使用@PreAuthorize注解来检查角色
@预先受权(“具有角色("”+受权常数.使用者+“",)”)
如何使用@PreAuthorize注解检查多个角色?

9vw9lbht

9vw9lbht1#

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

@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 {
}

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

@IsAuthenticatedAsAgentOrCustomerIsUserId
Folder findByUserIdAndType(@Param("userId") String userId, @Param("typeId") FolderType id);

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

oewdyzsn

oewdyzsn2#

@预先受权(“有任何角色('角色管理员','角色使用者')”)

hasAnyRole() 

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

@PreAuthorize("hasAnyRole('ADMIN','DB-ADMIN')")

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

jgovgodb

jgovgodb3#

只需在SpEL表达式中使用&&||即可合并角色

@PreAuthorize("hasRole('" + AuthoritiesConstants.USER + "')" +
              " && hasRole('" + AuthoritiesConstants.ADMIN + "')" )
7xzttuei

7xzttuei4#

我认为最好的选择是使用@PreAuthorize(“hasAnyRole()”)
在本例中,我假设@PreAuthorize(“hasAnyRole(授权常量.用户,授权常量.管理员)”)

相关问题