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

时间:2016-04-27 14:02:48

标签: spring spring-mvc spring-security

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

目前我正在使用此注释 -

 @Secured({"ROLE_USER", "ROLE_TIMER_TASK"})

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

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

3 个答案:

答案 0 :(得分:26)

对于,请使用@PreAuthorize注释:

@PreAuthorize("hasRole('ROLE_USER') or hasRole('ROLE_TIMER_TASK')")

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

@PreAuthorize("hasRole('USER') or hasRole('TIMER_TASK')")

确保在安全配置中启用了注释前和注释后。

答案 1 :(得分:6)

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

input_csv = []
with open('YourCsv.csv', 'r', encoding='UTF-8') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        input_csv.append(row)

for row in input_csv:
    print(row)

for row in input_csv:
    print(row)

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

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

答案 2 :(得分:2)

除了holmis83之前的回答....

为方法安全启用预注释和后注释:

Java配置:

@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig {
// ...
}

Xml配置:

<global-method-security pre-post-annotations="enabled"/>