gpt4 book ai didi

java - spring @Preauthorize 中的自定义方法

转载 作者:行者123 更新时间:2023-12-03 17:18:40 28 4
gpt4 key购买 nike

我正在实现一个应用程序,该应用程序具有一些访问完全基于权限的方法。权限是使用 Spring 实现的。使用 添加权限@PreAuthorize 方法顶部的注释。问题是我希望在注释中有完全自定义的方法 (EL)。
所以我想实现的是:

@PreAuthorize("customAllowThis()")
public void foo() { }

我认为有两种方法:

方法一:
尝试覆盖 SecurityExpressionRoot 并在那里添加我的自定义方法。我将在不同的方法上使用多个授权服务,因此将所有特定方法都放在 SecurityExpressionRoot 中会造成很大的困惑。

方法二:
创建服务并将方法放在那里:
@Component
public class AuthorisationService {
public boolean allowThis() {
return true;
}
}

并执行以下操作:
@PreAuthorize("@authorisationService.customAllowThis()")
public void foo() { }

我更喜欢方法 2,尽管它看起来像绕过 Spring 的“自然顺序”。在如何处理这种情况方面是否有任何好的/最佳做法?关键是我不想将所有特定方法都放在一个类中,但另一方面我不想做一些“肮脏”的事情。

最佳答案

为此,您可以执行以下操作:

  • 创建一个接受一系列允许角色的自定义注释,如下所示:
    @Allows({RoleEnum.ROLE1, RoleEnum.ROLE2 })
  • 使用 SPeL,我们可以调用一个自定义方法来检查用户是否拥有这些角色,如下所示:
    @PreAuthorize("myServiceClass.hasRoles(#roles)")
  • 在服务类中,您只需根据 OAuth 数据库中的角色验证用户角色,并在服务中执行任何业务逻辑。
  • 关于java - spring @Preauthorize 中的自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24895829/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com