【问题标题】:Spring Security and Multitenancy / REST -> How? Best practice? Reference app?Spring Security and Multitenancy / REST -> 如何?最佳实践?参考应用?
【发布时间】:2011-03-20 16:49:13
【问题描述】:
我一直在寻找一种保护 URL 的方法,例如
@RequestMapping("/owners/{ownerId}/pets/new")
在用户(而非角色)级别,即只有 ID 为 {ownerId} 的所有者拥有访问权限。此外,我想保护 RESTful 设计,包括。对所有者级别的 JSON 服务的异步访问动态。
我的问题:
- 如何最好地使用 Spring
安全?
- 这是如何完成的
/owners/{ownerId}/pets/new 是
通过异步请求访问?
- 如何访问上述 URI
来自第三方应用程序,例如苹果手机
应用程序?
- 任何示例/参考应用程序/文章?
谢谢
呃
【问题讨论】:
标签:
java
ajax
spring
spring-security
multi-tenant
【解决方案1】:
使用@PreAuthorize。您可以使用 Spring-EL 表达式,如
@RequestMapping("/owners/{ownerId}/pets/new")
@PreAuthorize("#ownerId == principal.id)")
public void doSomething(@RequestParam Number ownerId);
以上代码仅代表。一些细节取决于您的实现。
阅读更多here。
【解决方案2】:
关于您的问题 1,我能想到的最简单的方法是 - 在您的控制器方法中,您可以首先根据 ID 检查用户授权。 UserDetails 可从 SpringSecurityContext 访问,您可以从中检索当前登录用户的 ID。从请求 URL 获得的 ID 也可以作为路径变量访问。如果这两个不匹配,您可以简单地抛出一个异常,如 AccessDeniedException。
您可以将此逻辑移动到 BaseController 中的一个方法中,该方法将充当所有控制器的超类,并且所有控制器方法都可以使用相同的方法进行类似的检查。