我正在使用jhipster 4,我对此表示怀疑,我尝试放置一个没有模式ROLE_ *的新角色,并且当我使用java注释@Secured时它不起作用。
public final class AuthoritiesConstants {
public static final String SUPERVISED = "SUPERVISED";
...
我在许多网站上检查了有关此问题的信息,但找不到任何建议。我需要放置一个名为SUPERVISED的角色,因为我的应用程序需要与其他应用程序集成。
@Secured({AuthoritiesConstants.SUPERVISED)
public class GreatResource {
...
当Web客户端以SUPERVISED角色执行请求时,该操作将被拒绝
为什么会这样呢?
最佳答案
使用@Secured
注释时,默认情况下,如果提供的角色不是以ROLE_
开头,则将添加该角色。筛选器正在检查ROLE_SUPERVISED
而不是SUPERVISED
,这就是为什么它无法按预期工作的原因。
使用Expression-Based Access Control,您可以检查用户权限,包括没有ROLE_
前缀的权限。将@PreAuthorize
注释与hasAuthority
表达式结合使用:
@PreAuthorize("hasAuthority('SUPERVISED')")