我试图创建可选的登录您可以登录(用户名或电话号码或电子邮件)在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;
}
我这样做是为了让用户有三种登录方式的选择,但它一直给我错误,还没有找到答案。}
2条答案
按热度按时间1hdlvixo1#
除了上面的答案和使代码工作的好方法之外,我发现这节课还解释了关于可选登录的所有内容以及我们如何设置它:
https://www.youtube.com/watch?v=b03uruvol30
关于jwt和springsecurity的每一个细节,以及你无法理解的每一个细节。
你会在这个视频中找到它。
2admgd592#
首先:这不是java中重写的方式。
@Override
应该位于方法声明的正上方。第二:不能将任何逻辑放在方法(if else语句)之外。
第三:你的if块(case)实际上没有任何效果。对于java
String email
以及String phone
都是一样的,只是一根线。所以整个if-else
没有道理。我就选一个,超控
loadUserByUsername()
,如果您想区分登录类型,我首先想到的是regex,因此声明将变成:这只是我的第一个想法,当然你可以用更好的方式来实现它。而且,正则表达式的模式也不理想,只是从我的头顶打字。。。