当用户使用Spring Security单击其电子邮件中的链接时,我正尝试执行自动登录。
我已经看过很多例子来执行程序化登录,如下所示:
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
try {
Authentication auth = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(auth);
repository.saveContext(SecurityContextHolder.getContext(), request, response);
rememberMeServices.loginSuccess(request, response, auth);
....
我看到的问题是我没有原始密码,因此我无法创建UsernamePasswordAuthenticationToken。如果我没有明文密码(我有一个被编码的密码),还有其他任何登录用户的方法吗?
提前致谢。
答案 0 :(得分:35)
在允许从电子邮件中的链接登录方面,请注意您知道自己在做什么。 SMTP不是一种安全协议,因此依靠拥有电子邮件作为身份验证形式的人通常是不好的。
如果您已经知道身份验证,则无需使用AuthenticationManager。相反,您可以直接设置身份验证,如下所示:
Authentication authentication = new UsernamePasswordAuthenticationToken(user, null,
AuthorityUtils.createAuthorityList("ROLE_USER"));
SecurityContextHolder.getContext().setAuthentication(authentication);
如果您想要一个完整的示例,可以参考SignupController应用程序中的secure mail,它是Spring Security 3.1入门(InfoQ video of presentation)的基础。