学习sa-token权限校验
(记录在毕设中的使用)
1、编程式权限认证
1、新建一个类AuthManager
也就是官网中的自定义权限加载接口实现类,然后重写两个方法
具体在两个方法里面写获取权限列表和角色列表
▼java复制代码@Component public class AuthManager implements StpInterface { @Override public List<String> getPermissionList(Object loginId, String loginType){ return null; } @Override public List<String> getRoleList(Object loginId, String loginType){ return null; } }
2、写具体的获取权限列表的业务代码
1、这里传递过来的两个参数我没有用
2、直接在getLoginUser()里面直接使用 StpUtil.getLoginIdAsLong() 来获取当前登录用户的id,进而获取当前登录用户
3、根据当前登录用户的角色获取他所拥有的权限。(本系统中不存在一个用户有多个角色的可能(所以查询简单了一点))
▼java复制代码/** * 返回一个账号 根据角色获取权限列表(返回权限的名称) */ @Override public List<String> getPermissionList(Object loginId, String loginType) { User user = userService.getLoginUser(); return rolePermissionsService.getPermissionsNameByRole(user.getRoleId()); }
3、在业务逻辑中使用
直接使用 StpUtil.hasPermission("user.add") ,它的返回值是一个布尔值,所以再结合 ThrowUtils 就能在业务逻辑中判断是否拥有某个权限
▼java复制代码/** * 手动添加用户 * @param userAddRequest * @return */ @PostMapping("/add") public BaseResponse<Long> addUser(@RequestBody UserAddRequest userAddRequest){ if(userAddRequest == null) { throw new BusinessException(ErrorCode.PARAMS_ERROR); } //测试sa-token权限校验 ThrowUtils.throwIf(!StpUtil.hasPermission("user.add"),ErrorCode.NO_AUTH_ERROR); return ResultUtils.success(userService.addUser(userAddRequest)); }
2、注解式鉴权
使用 Sa-Token 的注解式鉴权(如 @SaCheckLogin、@SaCheckPermission)时,必须实现 StpInterface 接口,否则权限验证逻辑无法生效。
1、添加一个配置项拦截器(参考鱼皮和官网的)
▼java复制代码@Configuration public class SaTokenConfig implements WebMvcConfigurer { //注册Sa-Token拦截器,打开注解式鉴权功能 @Override public void addInterceptors(InterceptorRegistry registry) { // 注册 Sa-Token 拦截器,打开注解式鉴权功能 registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**"); } @PostConstruct public void rewriteSaStrategy() { // 重写Sa-Token的注解处理器,增加注解合并功能 SaAnnotationStrategy.instance.getAnnotation = AnnotatedElementUtils::getMergedAnnotation; } }
2、然后就可以向官网一样直接写在方法或者类上
3、如果校验不通过,根据报错信息添加一种全局异常处理
在globalExceptionHandler中添加
▼java复制代码@ExceptionHandler(NotLoginException.class) public BaseResponse<?> notLoginExceptionHandler(NotLoginException e){ log.error("NotLoginException", e); return ResultUtils.error(ErrorCode.NOT_LOGIN_ERROR, "操作失败,未登录"); }
真的好方便!!!爱了😍
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 29✅ 今天做了:Redis消息队列⏰ 明天计划:继续学消息队列
2
Day 17🧭行动:学习了Python最后一个知识点:异常处理🤓体会:Python 程序一旦发生异常,如果没有捕获处理,程序就会直接崩溃终止。使用"try-except"捕获异常,可以预先写好异常处理方案:比如打印友好提示、记录日志、释放资源,保证程序不会直接退出,还能继续运行。🧑💻代码:try:print("================================")# pri
2
Day1今天学习了java中if的使用
2
day 61今天来学校上课了,和教授谈了,可以接下RA工作,不过一周只能charge 10h, 工资很少,不过一个月600刀也勉强比没有好。今天的工作还没做完,最近在做知识库构造,Ui/UX上周就设计完,现在在做底座的建设今天也让Claude直接帮我把Neetcode150 题目+解题思路+代码给我整理了,我发现我真的只有找碎片化时间才能做题,我还不如先背先回忆(之前都做过)祝祖国母亲节日快乐,也
2
Day 1✅ 今天做了:⏰ 明天计划:📚 今日感悟:
0
作者分享
求助求助,服务器带宽20M,为什么上传文件这个服务上传一个9MB的文件要上传三分钟,看了网关和后端没有文件上传限制,现在也没有人用服务器。还有什么改配置的地方吗?
2
打卡第30天
1.学习RAG的整个流程,安装pgvector
2.学习rust web项目,请求和访问的相关内容
3.看软考半个小时
明天回学校演示毕业设计,赶路的一天呢
2
打卡第29天
1.在阿里云服务器构建公司项目所需环境
(花老板的hhhh)
2.软考操作系统和计算机网络部分网课
3.尝试在rust语言与AI对话,并流式接受返回值(还没成功🫠)
4
打卡第28天
1.学习软考数据结构与算法的章节
2.在阿里云尝试负载均衡+伸缩组+ECS等部署项目(项目可以通过负载均衡进行正常访问,但是进不去宝塔面板(明天看看))
2
打卡第27天
1.今天看了三道AI项目面试题
2.看了软考数据结构百分之四十
3.突然转到一个新的项目组,了解了一下整体架构,看了项目的设计文档
2
