Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring中的无认证用户鉴别_Java_Spring_Spring Mvc_Spring Security_Spring Boot - Fatal编程技术网

Java Spring中的无认证用户鉴别

Java Spring中的无认证用户鉴别,java,spring,spring-mvc,spring-security,spring-boot,Java,Spring,Spring Mvc,Spring Security,Spring Boot,我目前正在为使用SpringBoot的网站编写一个基于简单RESTAPI的评论系统 为了让人们删除或更新他们之前发布的评论,我想在Cookie中存储一个唯一的标记来记住/识别他们。用户无需注册即可发表评论。当用户删除cookie或cookie过期时,将无法恢复删除/修改注释的权限 当然,我自己也可以使用过滤器实现这样的功能,但我想知道在Spring中是否有实现这一功能的标准方法(可能使用Spring安全性)?我认为这是一个常见的场景,但我能找到的所有示例都包括用户名/密码之类的身份验证信息。这可

我目前正在为使用SpringBoot的网站编写一个基于简单RESTAPI的评论系统

为了让人们删除或更新他们之前发布的评论,我想在Cookie中存储一个唯一的标记来记住/识别他们。用户无需注册即可发表评论。当用户删除cookie或cookie过期时,将无法恢复删除/修改注释的权限


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

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

  • 创建从cookie加载身份验证信息的
    SecurityContextRepository
    的实现
  • 创建
    AuthenticationProvider
    的实现,以检查cookie是否包含有效值。可以向cookie值添加前缀和/或后缀,并且可以对该值进行加密以确保真实性并防止模拟

  • 我有一个示例来演示要实现的组件。该示例将身份验证信息存储在内存缓存中,但可以根据需要存储在
    HttpSession
    或任何其他数据存储中。代码是Scala格式的,但Java程序员应该可以阅读。

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


    您可以使用类似的模式。您可以读取cookie并对用户进行身份验证,而不是读取授权头。

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

  • 您有一个不受保护的url,比如authenticate,您将在其中向服务器发送用户名和密码

  • 基于用户名和密码对用户进行身份验证

  • 创建安全令牌

  • 在每个访问资源的请求中发送令牌

  • 以下是完整的工作示例:

    使用cookie标识浏览器以持有权限看起来是一种奇怪的设计。更接近的是Spring框架中的标准RememberMe选项,但它仅在成功身份验证后使用,并且仅用作下一次连接的提示。。。