public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException如何封装
时间: 2023-06-27 12:01:44 浏览: 283
可以封装成一个服务,例如:
```java
@Service
public class UserDetailsService {
@Autowired
private UserRepository userRepository;
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User '" + username + "' not found");
}
List<GrantedAuthority> authorities = new ArrayList<>();
for (Role role : user.getRoles()) {
authorities.add(new SimpleGrantedAuthority(role.getName()));
}
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);
}
}
```
在上面的例子中,我们使用了 `UserRepository` 来查询数据库,然后根据查询结果构建 `UserDetails` 对象。如果查询结果为 `null`,则抛出 `UsernameNotFoundException` 异常。最后,我们将角色列表转换为 `GrantedAuthority` 列表,并使用它们来创建 `UserDetails` 对象。这个服务可以在其他地方被注入使用。
阅读全文