我正在使用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')")

10-04 19:45