在SecurityContextHolder中重置密码时,如何存储未认证用户的用户详细信息?

时间:2018-10-08 11:52:48

标签: authentication spring-security reset-password security-context userdetailsservice

我最近一直在使用Spring Boot应用程序中的密码重置功能,但是遇到了有关Spring Security的问题。

根据我当前正在学习的教程(https://www.baeldung.com/spring-security-registration-i-forgot-my-password),必须向不再能够记住密码的用户发送一封电子邮件,以便他可以设置一个新密码。一旦他单击链接,映射方法将确保该链接中包含的唯一令牌是可以的(即,它对应于发送该链接但尚未过期的用户)。如果是这种情况,必须在身份验证对象中设置 SimpleGrantedAuthority 特权,然后以以下方式将其赋予 SecurityContextHolder

Authentication auth = new UsernamePasswordAuthenticationToken(user,null,Arrays.asList(new SimpleGrantedAuthority(“ CHANGE_PASSWORD_PRIVILEGE”)));; SecurityContextHolder.getContext()。setAuthentication(auth);

因此,教程的作者显然正在尝试存储忘记密码的用户的用户详细信息,而无需像普通登录用户一样实际对其进行身份验证。相反,他们只是向他提供重设密码的特权,只有在此之后他才能登录。

回到问题本身: 当我将用户信息保存在ContextHolder中时,只要位于请求方法中(我首先将其设置在此位置),该信息就仍然可用,但是在进入另一种REST方法进行检索后,该信息便消失了。在那里,只能看到anonymousUser String作为主体,这显然不是我想要的。因此,我想问自己,如何无需登录用户即可维护此信息。我对本教程的作者持怀疑态度,他只是在contextHolder中设置此信息而没有创建任何FilterChain并随后进行检索。我对Spring Security主题是完全陌生的,所以不要批评我太多:)

最良好的祝愿,
迪玛

0 个答案:

没有答案