我们啥时候在spring security中使用denyAll

Posted

技术标签:

【中文标题】我们啥时候在spring security中使用denyAll【英文标题】:When do we use denyAll in spring security我们什么时候在spring security中使用denyAll 【发布时间】:2015-09-26 17:04:09 【问题描述】:

我有点困惑为什么有人会使用@PreAuthorize("denyAll") 作为方法。根据 spring 安全文档,它总是评估为 false。

如果我们不允许访问特定方法,那么保留这种方法的意义何在。为什么不评论出来?还是它仍然可以从同一个类中访问?

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

【问题讨论】:

应用此注解的结果在 bean 的代理级别实例中很有用(当其他 bean 使用带注解的方法调用 bean 时),但您仍然可以在同一个 bean 内部使用该方法而不是通过代理实例,当您想在内部使用该方法时,也许您可​​以使用该组合。 是否有任何文档可以让我获得更多详细信息?你能举个例子,有人想要这样的安全配置吗 【参考方案1】:

我发现一个关于否认所有的小说明是

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

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

这里是link

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

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

【讨论】:

【参考方案2】:

我以这种方式装饰我的服务类,这需要各个内部服务方法覆盖拒绝类级别的 PreAuth 注释。这确保了类中的每个方法都将得到适当的保护,并回退到denyAll。

我知道这是旧的,但我偶然发现它正在寻找 @PreAuthorize('denyAll') 的语法,并认为我会投入我的 2cents。

【讨论】:

以上是关于我们啥时候在spring security中使用denyAll的主要内容,如果未能解决你的问题,请参考以下文章

我们应该使用啥来代替 Spring Security 的 JSP 标签库来在 HTML 页面中的客户端具有安全性?

将 Spring Security SAML 升级到 1.0 版本需要啥

有啥方法可以强制在 spring-security 中的某些页面使用 https 吗?

“使用-D_SCL_SECURE_NO_WARNINGS”是啥意思?

使用 Spring Security 的 OAuth 2.0 中的 resourceId 是啥意思

spring-security 使用AuthenticationProvider配置自定义登录选项