security中loadUserByUsername获取多个参数
时间: 2024-05-09 13:19:24 浏览: 123
springSecurity 实现传参
在Spring Security中,loadUserByUsername方法只接受一个参数,即用户名。如果需要获取多个参数,可以通过自定义UserDetailsService实现。
首先,创建一个实现UserDetailsService接口的类,例如MyUserDetailsService。在该类中,重写loadUserByUsername方法,并通过自定义的UserRepository获取用户信息。可以通过传入一个包含用户名和其他参数的对象,例如包含用户名和手机号码的UserAuth对象,来获取用户信息。
示例代码如下:
```
@Service
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserAuth userAuth = userRepository.findByUsername(username);
if (userAuth == null) {
throw new UsernameNotFoundException("用户名不存在");
}
return new User(userAuth.getUsername(), userAuth.getPassword(), new ArrayList<>());
}
public UserDetails loadUserByAuth(UserAuth userAuth) throws UsernameNotFoundException {
UserAuth user = userRepository.findByUsernameAndPhone(userAuth.getUsername(), userAuth.getPhone());
if (user == null) {
throw new UsernameNotFoundException("用户名或手机号码不正确");
}
return new User(user.getUsername(), user.getPassword(), new ArrayList<>());
}
}
```
在上述代码中,loadUserByAuth方法接受一个UserAuth对象作为参数,其中包含用户名和手机号码。通过调用UserRepository的findByUsernameAndPhone方法获取用户信息,并返回一个UserDetails对象。可以通过类似的方法,传入其他参数获取用户信息。
阅读全文