可选登录spring+jwt

bmp9r5qi  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(286)

我试图创建可选的登录您可以登录(用户名或电话号码或电子邮件)在JavaSpring,我这样做了,但它没有工作,我搜索了很多关于它,但没有答案,我很肯定有办法做到这一点。
代码如下:

@Service
public class MyUserDetailsService implements UserDetailsService {

   @Autowired
   private UserRepository userRepository;

   @Override
   if(loadUserByUsername(String username)){
          public UserDetails loadUserByUsername(String username) {
             User user = userRepository.findByUsername(username);
             if (user == null) {
                throw new UsernameNotFoundException(username);
             }
             return new MyUserPrincipal(user);
           }
   } elseif(loadUserByUsername(String phone)){
          public UserDetails loadUserByUsername(String phone) {
                User user = userRepository.findByUsername(phone);
                if (user == null) {
                throw new PhoneNotFoundException(phone);
          }
          return new MyUserPrincipal(user);
   } elseif(loadUserByUsername(String email)){
            public UserDetails loadUserByUsername(String email) {
                User user = userRepository.findByUsername(email);
                if (user == null) {
                     throw new EmailNotFoundException(email);
                }
                return new MyUserPrincipal(user);
            }
   } else {
       return ex.CredentialNotFoundExptions;
   }

我这样做是为了让用户有三种登录方式的选择,但它一直给我错误,还没有找到答案。}

1hdlvixo

1hdlvixo1#

除了上面的答案和使代码工作的好方法之外,我发现这节课还解释了关于可选登录的所有内容以及我们如何设置它:
https://www.youtube.com/watch?v=b03uruvol30
关于jwt和springsecurity的每一个细节,以及你无法理解的每一个细节。
你会在这个视频中找到它。

2admgd59

2admgd592#

首先:这不是java中重写的方式。 @Override 应该位于方法声明的正上方。
第二:不能将任何逻辑放在方法(if else语句)之外。
第三:你的if块(case)实际上没有任何效果。对于java String email 以及 String phone 都是一样的,只是一根线。所以整个 if-else 没有道理。
我就选一个,超控 loadUserByUsername() ,如果您想区分登录类型,我首先想到的是regex,因此声明将变成:

@Override
public UserDetails loadUserByUsername(String login) {
    if (login.matches("(.*)@(.*).(.*)") {
        // email logic
    } else if (login.matches("[0-9]+") {
        // phone logic
    } else {
        // username logic
    }
}

这只是我的第一个想法,当然你可以用更好的方式来实现它。而且,正则表达式的模式也不理想,只是从我的头顶打字。。。

相关问题