27

当用户单击其电子邮件中带有 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。如果我没有纯文本密码(我有编码的密码),还有其他登录用户的方法吗?

提前致谢。

4

1 回答 1

58

请注意,在允许从电子邮件中的链接登录方面,您知道自己在做什么。SMTP 不是一种安全协议,因此依赖拥有电子邮件作为身份验证形式的人通常是不好的。

如果您已经知道它们已通过身份验证,则无需使用 AuthenticationManager。相反,您可以直接设置身份验证,如下所示:

Authentication authentication = new UsernamePasswordAuthenticationToken(user, null,
    AuthorityUtils.createAuthorityList("ROLE_USER"));
SecurityContextHolder.getContext().setAuthentication(authentication);

如果您想要一个完整的示例,您可以参考安全邮件应用程序中的SignupController,它是 Spring Security 3.1 入门(InfoQ 演示视频)的基础。

于 2012-07-03T15:35:52.603 回答