当前位置: 首页 > 知识库问答 >
问题:

在Spring中区分没有身份验证的用户

宇文和同
2023-03-14

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

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

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

共有1个答案

聂建茗
2023-03-14

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

  1. 创建从Cookie加载身份验证信息的SecurityContextrepository的实现。
  2. 创建authenticationprovider的实现,以检查cookie是否包含有效值。可以将前缀和/或后缀添加到cookie值中,并且可以对该值进行加密,以确保真实性并防止冒充。

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

 类似资料:
  • 我发现在我的应用程序中,使用spring security的安全性在登录时不会检查我的用户名的大小写。 我有这个代码: 我不知道为什么当我对用户名使用不同的特殊情况时,spring的身份验证允许所有情况。有人能帮我吗? 谢啦

  • 是否可以使用Kerberos但不使用JAAS来验证用户/密码?

  • 我在web应用程序中使用Spring Security(v3.1.3)进行X.509身份验证。用户和角色存储在数据库中,但我实际上不需要这样做,因为客户端证书的CNs符合“[角色]-[用户名]”模式,这意味着我已经从证书本身获得了用户名和角色。那么,如何不费吹灰之力就消除数据库呢?我应该编写自己的用户服务实现来填充UserDetails,还是有更优雅的方法?

  • 这是我编写的代码,我在这里使用了自定义的用户详细信息服务,但每次我试图运行这个代码bean时,都没有找到Epection开始,我想知道有没有实现它的方法,因为我看到auth对象有一个方法auth.jdbcauthentication(); 这是我在init()中执行此操作后的堆栈跟踪

  • null 原因:javax.net.ssl.sslhandShakeException:在java.base/sun.security.ssl.alert.createsslException(Alert.java:128)在java.base/sun.security.ssl.alert.createsslException(Alert.java:117)在java.base/sun.secur

  • 我几乎没有Spring boot控制器类来公开rest web服务。每当有用户试图访问这些服务时,我需要调用一个web服务来检查用户(用户id将作为RequestHeader传递)是否被授权。如果未经授权,需要向用户显示错误页面(freemarker模板)。 我不想编写一个方法来调用身份验证Web服务,并从每个控制器方法调用它,抛出一个异常,并使用@ControllerAdvice将用户重定向到拒