我在使用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(整数)并在每次请求资源时进行比较,但在我看来,我正在拉错绳索的一端:)
感谢您的任何建议
答案 0 :(得分:0)
您应该查看spring安全文档的Expression-Based Access Control部分。
从文档中复制的示例:
@PreAuthorize("#contact.name == authentication.name")
public void doSomething(Contact contact) {
..
}
这将检查联系人的姓名是否等于当前登录用户的姓名。
使用此功能,您可以构建比使用简单角色更复杂的访问规则。但是,这不排除使用角色。您仍然可以保留基本安全检查的角色。