我目前正在为使用Spring Boot的网站编写评论系统,该系统将基于一个简单的REST API。
为了让人们删除或更新之前发布的评论,我想在Cookie中存储一个唯一的令牌来记住/识别它们。用户不需要注册才能发表评论。当用户删除cookie或其过期时,将无法获得删除/修改注释的权限。
当然可以自己使用过滤器来实现这样的功能,但我想知道在Spring中是否有标准的方法(可能使用Spring Security)?我认为这是一种常见的情况,但我能找到的所有示例都包括身份验证信息,如用户名/密码。
答案 0 :(得分:6)
这可以通过创建SecurityContextRepository
的自定义实现来实现。
SecurityContextRepository
的实现,从cookie中加载身份验证信息。AuthenticationProvider
的实现以检查cookie是否包含有效值。可以在cookie值中添加前缀和/或后缀,并且可以对值进行加密以确保真实性并防止冒充。我有一个sample app来演示要实现的组件。该示例将身份验证信息存储在内存缓存中,但可以根据需要将其存储在HttpSession
或任何其他数据存储中。代码在Scala中,但对Java程序员来说应该是可读的。
答案 1 :(得分:4)
使用Spring Security,您可以编写自定义过滤器以实现所需的功能。例如,检查RestTokenValidationFilter,这个会读取授权标头,并通过在数据库中查找令牌来验证令牌是否有效。
你可以使用类似的模式。您可以阅读Cookie并验证用户身份,而不是阅读授权标题。
答案 2 :(得分:1)
您可以轻松覆盖Spring安全实现
您有未经保护的网址说明身份验证,您将在其中向服务器发送用户名和密码。
根据用户名和密码验证用户
创建安全令牌。
在每次访问资源的请求中发送令牌。
这是完整的工作示例:
https://github.com/philipsorst/angular-rest-springsecurity