在Spring中区分未经身份验证的用户

时间:2015-12-13 23:10:56

标签: java spring spring-mvc spring-security spring-boot

我目前正在为使用Spring Boot的网站编写评论系统,该系统将基于一个简单的REST API。

为了让人们删除或更新之前发布的评论,我想在Cookie中存储一个唯一的令牌来记住/识别它们。用户需要注册才能发表评论。当用户删除cookie或其过期时,将无法获得删除/修改注释的权限。

当然可以自己使用过滤器来实现这样的功能,但我想知道在Spring中是否有标准的方法(可能使用Spring Security)?我认为这是一种常见的情况,但我能找到的所有示例都包括身份验证信息,如用户名/密码。

3 个答案:

答案 0 :(得分:6)

这可以通过创建SecurityContextRepository的自定义实现来实现。

  1. 创建SecurityContextRepository的实现,从cookie中加载身份验证信息。
  2. 创建AuthenticationProvider的实现以检查cookie是否包含有效值。可以在cookie值中添加前缀和/或后缀,并且可以对值进行加密以确保真实性并防止冒充。
  3. 我有一个sample app来演示要实现的组件。该示例将身份验证信息存储在内存缓存中,但可以根据需要将其存储在HttpSession或任何其他数据存储中。代码在Scala中,但对Java程序员来说应该是可读的。

答案 1 :(得分:4)

使用Spring Security,您可以编写自定义过滤器以实现所需的功能。例如,检查RestTokenValidationFilter,这个会读取授权标头,并通过在数据库中查找令牌来验证令牌是否有效。

你可以使用类似的模式。您可以阅读Cookie并验证用户身份,而不是阅读授权标题。

答案 2 :(得分:1)

您可以轻松覆盖Spring安全实现

  1. 您有未经保护的网址说明身份验证,您将在其中向服务器发送用户名和密码。

  2. 根据用户名和密码验证用户

  3. 创建安全令牌。

  4. 在每次访问资源的请求中发送令牌。

  5. 这是完整的工作示例:
    https://github.com/philipsorst/angular-rest-springsecurity