准备数据库数据

CREATE TABLE `user` (
`id` INT(11) NOT NULL auto_increment,
`username` VARCHAR(255),
`password` VARCHAR(255),
`phone` VARCHAR(255),
PRIMARY KEY (`id`)
);

Spring Security认证_数据库认证_数据库

编写用户实体类

/**
* @Author yqq
* @Date 2022/05/17 13:42
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private String phone;
}

编写dao接口

/**
* @Author yqq
* @Date 2022/05/17 13:46
* @Version 1.0
*/
public interface UserMapper extends BaseMapper<Users> {
}

添加 @MapperScan 注解

/**
* @Author yqq
* @Date 2022/05/17 12:25
* @Version 1.0
*/
@SpringBootApplication
@MapperScan("com.neu.mapper")
@Slf4j
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class,args);
log.info("服务启动成功");
}
}

创建 UserDetailsService 的实现类,编写自定义认证逻辑

/**
* @Author yqq
* @Date 2022/05/17 13:50
* @Version 1.0
*/
@Service
public class MyUserDetailService implements UserDetailsService {

@Autowired
private UserMapper userMapper;

//自定义认证逻辑
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//1 构造查询条件
QueryWrapper<Users> wrapper = new QueryWrapper<Users>().eq("username", username);
//2 查询用户
Users users = userMapper.selectOne(wrapper);
if (users == null)
return null;
//3 封装为UserDetails对象
UserDetails userDetails = User.withUsername(users.getUsername())
.password(users.getPassword())
.authorities("admin")
.build();
//返回封装好的userDetails对象
return userDetails;
}
}

测试连接数据库认证

Spring Security认证_数据库认证_自定义_02
Spring Security认证_数据库认证_java_03