在Spring Security中,带有"或"条件的@Secured注释中是否允许多个角色

Gou*_*cha 18 spring spring-mvc spring-security

我在我的项目中使用弹簧和弹簧安全4.我必须使用ROLE_USER或ROLE_TIMER_TASK调用我的dao方法.

目前我正在使用此注释 -

 @Secured({"ROLE_USER", "ROLE_TIMER_TASK"})
Run Code Online (Sandbox Code Playgroud)

这个@Secured注释只允许那些同时拥有这两个角色的用户,但是我想要由具有任何一个角色的用户调用此方法.

如果用户具有此角色中的任何一个角色并调用此方法,是否可以?

hol*_*s83 31

对于,请使用@PreAuthorize注释:

@PreAuthorize("hasRole('ROLE_USER') or hasRole('ROLE_TIMER_TASK')")
Run Code Online (Sandbox Code Playgroud)

在Spring Security版本4中,ROLE_前缀可以省略:

@PreAuthorize("hasRole('USER') or hasRole('TIMER_TASK')")
Run Code Online (Sandbox Code Playgroud)

确保在安全配置中启用了批注前和批注后.


小智 6

要通过上述任何角色调用该方法,请使用:

@PreAuthorize("hasAnyRole('ROLE_USER','ROLE_TIMER_TASK')")
Run Code Online (Sandbox Code Playgroud)

并在安全类中启用注释前和注释:

@EnableGlobalMethodSecurity(prePostEnabled = true)
Run Code Online (Sandbox Code Playgroud)