1

我一直在寻找一种保护 URL 的方法,例如

@RequestMapping("/owners/{ownerId}/pets/new")

在用户(不是角色)级别,即只有 ID 为 {ownerId} 的所有者有权访问。此外,我想保护 RESTful 设计,包括。动态异步访问所有者级别的 JSON 服务。

我的问题:

  1. 使用 Spring Security 最好如何做到这一点?
  2. 当通过异步请求访问 /owners/{ownerId}/pets/new 时,这是如何完成的?
  3. 如何从 3rd 方应用程序(例如 iPhone 应用程序)访问上述 URI?
  4. 任何示例/参考应用程序/文章?

谢谢尔

4

2 回答 2

2

使用@PreAuthorize。您可以使用 Spring-EL 表达式,例如

@RequestMapping("/owners/{ownerId}/pets/new")
@PreAuthorize("#ownerId == principal.id)")
public void doSomething(@RequestParam Number ownerId);

以上代码仅具有代表性。一些细节取决于您的实现。

在这里阅读更多。

于 2010-07-26T02:54:14.950 回答
1

关于您的问题 1,我能想到的最简单的方法是 - 在您的控制器方法中,您可以首先根据 ID 检查用户授权。UserDetails 可从 SpringSecurityContext 访问,您可以从中检索当前登录用户的 ID。从请求 URL 获得的 ID 也可以作为路径变量访问。如果这两个不匹配,您可以简单地抛出一个异常,如 AccessDeniedException。您可以将此逻辑移动到 BaseController 中的一个方法,该方法将充当所有控制器的超类,并且所有控制器方法都可以使用相同的方法进行类似的检查。

于 2010-07-25T08:31:18.393 回答