Spring Security中如何通过电子邮件而不是用户名登录

abc*_*abc 0 java spring-security

我使用Spring Security,在Spring Security中是否可以使用电子邮件而不是用户名登录?

小智 8

您需要在登录表单中输入“电子邮件”参数

<input type="email" name="email">
Run Code Online (Sandbox Code Playgroud)

然后,让您的自定义WebSecurityConfigurerAdapter知道“电子邮件”现在是主要参数

protected void configure(HttpSecurity http) throws Exception {
         http
            .formLogin()
            .loginPage("/login")
            .usernameParameter("email")
            .permitAll()
        .and()
            .logout()
            .permitAll();
}
Run Code Online (Sandbox Code Playgroud)

最后,在您的UserDetailsS​​ervice实现中覆盖loadUserByUsername()

@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
    User user = userRepo.findByEmail(email);

    if (user == null) {
        throw new UsernameNotFoundException("Not found!");
    }

    return user;
}
Run Code Online (Sandbox Code Playgroud)