【问题标题】:Why secure methods in Spring Security and not just URLs?为什么要保护 Spring Security 中的方法而不仅仅是 url?
【发布时间】:2014-11-25 11:45:58
【问题描述】:

喂,

  • 没有足够的安全 URL?
  • 有没有一种方法可以让用户在没有所需凭据的情况下调用 url,这就是保护方法的原因?
  • 为什么需要安全方法而不仅仅是 URL 的真实示例?

谢谢

【问题讨论】:

  • “安全方法”是什么意思?

标签: methods spring-security


【解决方案1】:

在简单的情况下,通常只保护 URL 就足够了。将方法级安全性视为 URL 级安全性的补充。例如,可以借助 URL 级别的安全性来简单检查用户是否具有访问应用程序中某些 URL 的特定角色。

但是,在某些情况下,您需要更细粒度的安全性。如果您想只允许其创建者访问给定产品 (id=5),那么您不能仅使用 URL 级别的安全性。但是您可以通过方法级别的安全性来实现这一点。

考虑这个 URL。

https://myapp.com/products/5

您可以检查访问此 URL 的用户是否具有 REQUIRED_ROLE 角色。

<security:intercept-url pattern="/products/**" access="hasRole('REQUIRED_ROLE')" />

如果你需要确保用户也是产品的创造者,你需要这样的东西:

...

@PreAuthorize("#product.creator == authentication.name")
public void doSomething(Product product);

...

【讨论】:

  • 好的,谢谢。两个疑问: - #product.creator:creator 是产品的属性,必须在数据库中 - 如果有人调用方法但没有权限(返回拒绝访问页面?抛出异常?),默认行为是什么?谢谢
  • 这只是一个例子,但基本上是的,创作者是产品的财产。如果用户没有所需的权限,则会抛出AccessDeniedException,其处理方式取决于您的配置。
  • 是的,但它在哪里配置?对于网址,我知道您可以定义自定义拒绝页面
  • 首先您必须实现AccessDeniedHandler,然后将其分配给ExceptionTranslationFilter。您可以借助 Spring Security 命名空间元素来实现这一点。但是,由于这是一个相当复杂的话题和完全不同的问题,我建议您查看documentation。无论如何,如果您的原始问题已得到回答,请将答案标记为已接受,以便其他人受益。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2015-01-28
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多