UserDetailsService 介绍
UserDetailsService 在 Spring Security 中主要承担查询系统内用户、验证密码、封装用户信息和角色权限。大白话就是你写一个实现类实现 UserDetailsService 接口,在这个实现类中去查询数据库中的用户,并封装成一个实现了 UserDetails 接口的实体类模型。
UserDetailsService 具体操作
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.security.mysql.dao.UserDao;
import com.security.mysql.entity.UserEntity;
import com.security.user.UserDetailsInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class UserDetailsServiceImpl implements UserDetailsService {
// TODO 这里改成你自己的服务或者Dao查询
@Autowired
private UserDao userDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
log.info("进入 loadUserByUsername ...");
// TODO 查询系统内的用户
LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserEntity::getUsername, username);
UserEntity userEntity = userDao.selectOne(wrapper);
if (userEntity == null) {
// 未查询到用户
throw new RuntimeException("not find user");
}
// TODO 封装成实现了 UserDetails 接口的实体类模型
return UserDetailsInfo.builder()
.id(userEntity.getId())
.username(userEntity.getUsername())
.password(userEntity.getPassword())
.build();
}
}
UserDetailsService 方法介绍
| 方法名 | 作用 |
|---|---|
| UserDetails loadUserByUsername(String username) | 根据用户名加载用户信息 |
End