【发布时间】:2014-11-25 11:45:58
【问题描述】:
喂,
- 没有足够的安全 URL?
- 有没有一种方法可以让用户在没有所需凭据的情况下调用 url,这就是保护方法的原因?
- 为什么需要安全方法而不仅仅是 URL 的真实示例?
谢谢
【问题讨论】:
-
“安全方法”是什么意思?
喂,
谢谢
【问题讨论】:
在简单的情况下,通常只保护 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);
...
【讨论】:
AccessDeniedException,其处理方式取决于您的配置。
AccessDeniedHandler,然后将其分配给ExceptionTranslationFilter。您可以借助 Spring Security 命名空间元素来实现这一点。但是,由于这是一个相当复杂的话题和完全不同的问题,我建议您查看documentation。无论如何,如果您的原始问题已得到回答,请将答案标记为已接受,以便其他人受益。