0

我正在开发 Spring MVC 应用程序。应用程序功能可通过包含 ajax 逻辑的 jsp 使用的 ReST API 访问。我正在使用具有定义角色(用户、公司、管理员)的弹簧安全性。方法使用 requestMapping 和 responseBody,例如:

www.app.com/auth/{userId}/request/{requestId}

当然,它支持获取资源的 GET 和创建或更新资源的 POST。问题是,在使用例如 userId = 1 成功登录后,我想要使用 requestId = 99 的 GET 请求。但是当我为 Chrome 运行 WebDev 客户端时,我还可以通过简单的格式请求访问另一个资源

www.app.com/auth/5/request/{requestId}

所以基本上,我可以访问我不被允许看到的资源。我希望你明白我要去的地方。

我的问题是 - 确保这一点的最佳方法是什么?我正在考虑在会话中存储记录的用户 ID(整数)并在每次请求资源时对其进行比较,但在我看来,我拉错了绳子的一端:)

谢谢你的任何建议

4

1 回答 1

0

您应该查看spring 安全文档的基于表达式的访问控制部分。

从文档中复制的示例:

  @PreAuthorize("#contact.name == authentication.name")
  public void doSomething(Contact contact) {
     ..
  }

这将检查联系人的姓名是否等于当前登录用户的姓名。

使用此功能,您可以构建比简单角色更复杂的访问规则。但是,这并不排除使用角色。您仍然可以保留基本安全检查的角色。

于 2013-10-01T09:19:20.057 回答