弹簧访问控制

时间:2013-10-01 01:26:04

标签: java spring spring-mvc spring-security

我在使用Spring MVC应用程序。应用程序功能可通过ReST API访问,其中包含ajax逻辑的jsp消耗。我正在使用具有已定义角色的Spring安全性(USER,COMPANY,ADMIN)。方法使用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(整数)并在每次请求资源时进行比较,但在我看来,我正在拉错绳索的一端:)

感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

您应该查看spring安全文档的Expression-Based Access Control部分。

从文档中复制的示例:

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

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

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