一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情。
大家好,我是程序员路飞,三年的下水道打杂前端,喜欢研究技术,正在往全栈发展
欢迎小伙伴们加我微信:DZHningmeng,一起讨论,期待与大家共同成长🥂
前言
这是Spring Boot集成Spring Security的第四章,我将会通过这个系列文章,包括完整的项目搭建、编码过程实现(认证和授权),关键点讲解,来帮助大家了解Spring Security在实际项目中的应用
今天这篇内容主要是接口鉴权
往期系列
Spring Boot集成Spring Security系列一之搭建项目
Spring Boot集成Spring Security系列二之查询用户
Spring Boot集成Spring Security系列三之自定义登录
功能编码
表结构分析
因为用户的接口权限数据是保存在数据库表中,不同的用户关联着不同的接口权限
ums_admin: 用户信息表ums_permission: 权限信息表ums_admin_permission_relation: 用户信息权限关联表
编码
编写查询用户权限的service
@Select("select * from ums_permission p where p.id in (select permission_id from ums_admin_permission_relation r where r.admin_id = #{id})")
List<UserPermission> queryUserPermissionById(@Param("id") Integer id);
这边启动项目debug,可以看到权限已经被查询出来和数据的一致
上一篇我们通过username查询user的接口没有增加权限的注解,所有是可以访问的,现在加上注解再启动项目试下
先执行sql添加权限数据
INSERT INTO `ums_permission` VALUES ('6', '0', '通过username查询用户', 'ums:query:username', null, '1', '/user//queryUserByUsername', '1', NOW(), '0');
INSERT INTO `ums_admin_permission_relation` VALUES ("2", "1", "6", NULL);
@Override
public List<UserPermission> queryUserPermissionById(Integer id) {
return userMapper.queryUserPermissionById(id);
}
在userDetailsService中调用
@Bean
public UserDetailsService userDetailsService() {
// 获取登录用户信息
return username -> {
User admin = userService.queryUserByUsername(username);
if (admin != null) {
List<UserPermission> permissionList = userService.queryUserPermissionById(admin.getId());
return new AdminUserDetails(admin, permissionList);
}
throw new UsernameNotFoundException("用户名或密码错误");
};
}
测试
先测试添加一个不存在的权限注解,可以看到报403
再测试我们sql插入的权限数据
小结
通过上面流程已经完成了一个基本的接口鉴权的功能,可以实现数据库动态控制,但是这个设计还是偏简单,主要带大家对Spring Security实现鉴权的基本功能了解,后面我们会设计出更加复杂,适用于更大系统的鉴权管理
🚴♀️ 结束语
通过项目实践,结合具体的步骤,输出相关的文章,给小伙伴一些有些的知识点,希望大家喜欢我的文章,希望认识到更多志同道合的伙伴,如果你也对技术感兴趣,可以加我好友,互相探讨,一起进步
Github: Cheering-baby
公众号: 程序员路飞
vx: DZHningmeng
最后,如果喜欢我的文章,可以给个赞👍或者关注➕都是对我最大的支持