Spring Security - 没有密码的程序化登录

Agu*_*pez 21 spring-mvc spring-security

当用户使用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);
 ....
Run Code Online (Sandbox Code Playgroud)

我看到的问题是我没有原始密码,所以我无法创建UsernamePasswordAuthenticationToken.如果我没有明文密码(我有一个被编码的密码),还有其他任何登录用户的方法吗?

提前致谢.

Rob*_*nch 38

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

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

Authentication authentication = new UsernamePasswordAuthenticationToken(user, null,
    AuthorityUtils.createAuthorityList("ROLE_USER"));
SecurityContextHolder.getContext().setAuthentication(authentication);
Run Code Online (Sandbox Code Playgroud)

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

  • 顺便说一句,如果通过电子邮件发送的链接进行身份验证不安全,那么几乎所有网站都不安全,因为几乎所有网站都使用电子邮件进行密码重置链接.我在这里错过了什么吗? (2认同)