如何在春季安全中通过电子邮件而不是用户名登录
2022-09-05 00:22:13
我使用弹簧安全。有没有办法在Spring安全中使用电子邮件而不是用户名登录?
我使用弹簧安全。有没有办法在Spring安全中使用电子邮件而不是用户名登录?
您需要在登录表单中使用“电子邮件”参数
<input type="email" name="email">
然后让你的自定义WebSecurityConfigurerAdapter知道“电子邮件”现在是一个主要参数。
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginPage("/login")
.usernameParameter("email")
.permitAll()
.and()
.logout()
.permitAll();
}
最后,在 UserDetailsService 实现中覆盖 loadUserByUsername()
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepo.findByEmail(email);
if (user == null) {
throw new UsernameNotFoundException("Not found!");
}
return user;
}
最简单的方法就是将其视为 .emailusername
在许多情况下,电子邮件包含您的用户名。例如:。在这封电子邮件中,是您的用户名。abc@gmail.comabc
因此,您只需要让用户直接输入电子邮件即可。
您唯一需要更新的是更改查询SQL,如下所示:
更改(按用户名查询):
SELECT username,password FROM users WHERE username=#{username}
收件人(通过电子邮件查询)
SELECT email AS username,password FROM users WHERE email=#{username}