我最近一直在使用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主题是完全陌生的,所以不要批评我太多:)
最良好的祝愿,
迪玛