我们什么时候在 spring security 中使用 denyAll

Zac*_*ack 6 java security spring spring-security spring-annotations

我对为什么有人会使用@PreAuthorize("denyAll")一种方法感到有些困惑。根据 spring 安全文档,它始终评估为 false。

如果我们不打算允许访问特定的方法,那么保留这样的方法又有什么意义呢?为什么不注释掉呢?还是仍然可以从同一个类中访问它?

我试图了解在什么情况下会出现这样的要求。

Sar*_*han 2

我发现一般否认一切的一个小澄清是

@DenyAll 注解可用于限制任何人(无论是否登录)对业务接口的访问。该方法仍然可以从 bean 类本身调用。

所以要点是它可以用于因某种原因公开或已公开的方法(也许它实现了一个接口),但永远不应该从外部直接调用。但是,可以从内部(在类内)调用它们。

链接在这里

我可以给你举一个真实的例子(这与我的工作非常相关)。我们有 2 个具有相同代码库的业务部门。现在,在一个单元中,有一项功能,一些移动经销商可以直接调用一项服务,直接向运营商端取消凭证,但在另一个单元中,由于某些业务规则,我们需要阻止此功能。由于我们在两个系统中使用相同的接口,因此在一个系统中我们使用denyall阻止其使用

希望这能给您一个清晰的想法。