春季安全 - 没有密码编程登录(Spring Security - Programmatic log

2019-07-30 05:53发布

我想,当用户点击他们与春季安全电子邮件中的链接进行自动登录。

我已经看到了很多的例子来进行编程登录如下所示:

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。 任何其他方式登录用户,如果我没有明文密码(我有一个编码的一个)?

提前致谢。

Answer 1:

要小心,你知道你在允许登录从电子邮件内的链接方面正在做什么。 SMTP是不是安全协议,所以它通常是坏依靠其电子邮件身份验证的一种形式的人。

你并不需要使用的AuthenticationManager如果你已经知道它们已通过认证。 相反,你可以直接设置身份验证,如下图所示:

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

如果你想有一个完整的例子,你可以参考SignupController在安全邮件 ,这是针对入门使用Spring Security 3.1为基础的应用程序(演示相关的视频) 。



文章来源: Spring Security - Programmatic login without a password