springboot+AOP+RBAC自定义权限访问控制03

springboot+AOP+RBAC自定义权限访问控制03!今天我们做完了整个权限管理的内容。

内容比较多。请大家有足够的耐心看完。

首先。我们为了测试权限的鉴别效果,我们提前准备了一个新闻实体类,对应数据库的tb_news数据表。

我们提前准备好了新闻的管理层控制器,业务层接口,持久层接口等。目的就是为了测试,当角色身份不争取的情况,是否可以请求到这个接口?

下面是验证的整个流程。

导入依赖包:spring-boot-starter-aop

由于我们设置过了parent参数,所以版本号就可以忽略了。



新闻表的内容。很简单。

 

我们使用了一个产品管理员+vip会员的角色账号,来请求新闻的业务接口。试验一下。我们自定义的权限访问系统能不能生效即可。


package com.yrl.managedemo.aspect;import com.yrl.managedemo.anno.PreAuthorize;
import com.yrl.managedemo.bean.Role;
import com.yrl.managedemo.bean.User;
import com.yrl.managedemo.service.IUserService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;@Component
@Aspect
public class AuthorizeAspect {@Autowiredprivate IUserService userService;@Autowiredprivate HttpServletRequest request;@Autowiredprivate HttpServletResponse response;//配置切入点@Pointcut("@annotation(com.yrl.managedemo.anno.PreAuthorize)")public void authorizePointCut(){}/*** 后端菜单资源鉴权:* 1:查询用户的所有接口资源权限列表* 2:获取当前接口资源的访问权限标识符* 3:比较* @param pjp* @return* @throws Throwable*/@Around("authorizePointCut()")public Object handle(ProceedingJoinPoint pjp) throws Throwable {//1:查询用户所有接口的资源权限列表//从请求头中模拟用户idString id = request.getHeader("user_id");List<Role>  perms = userService.getOneUserByUserId(Integer.valueOf(id)).get(0).getRoleList();//2:获取当前接口资源的访问权限标识符MethodSignature signature = (MethodSignature) pjp.getSignature();Method method = signature.getMethod();PreAuthorize annotation = method.getAnnotation(PreAuthorize.class);String methodPermission = annotation.value();//3:比较boolean result = perms.contains(methodPermission);//4:如果当前用户没有当前接口的权限,403/抱歉,您无权访问
//        if(!result){
//            response.setContentType("application/json;charset=UTF-8");
//            response.setStatus(403);
//            response.getWriter().write("抱歉,您无权访问");
//        }try (ServletOutputStream outputStream = response.getOutputStream()) {if(!result){response.setContentType("application/json;charset=UTF-8");response.setStatus(403);outputStream.print("抱歉,您权限不够");}} catch (IOException ex) {}//5:末尾的返回是交付给目标方法。甚至我们还可以拿到它的内容,修改后再交付回去。return pjp.proceed();}
}

 如图,这个是我们 自定义的一个权限访问类,里面我们已经把它提前做好了配置。

整体思想,就是2大步骤,第一步,定义切入点。第二步,定义好切入点的通知模式。我们这次采用的环绕通知。里面写好了具体的业务判定逻辑。

判定逻辑里面写的很清晰了,不再一一介绍了。


我们定义的鉴权业务类,在这个文件夹下面存放。

 


 

如图,我们使用postman接口测试软件来进行接口的调用。

我们在headers里面配置了用户的id,模拟真实的场景。

提交后,我们开启了调试模式。启动了服务器。

逐步排查数据变化情况。F7(按键)一步一个函数的去执行。

 

如图,我们已经拿到了用户的id为3.查询到了该用户的权限情况。经过判定,不吻合业务要求。所以返回了result为false.意味着当前登录的用户,是无权访问该接口地址的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444627.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI绘画】Stable Diffusion扩散模型 + Consistency一致性模型 小白必看!!!!!

手把手教你入门绘图超强的AI绘画&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包 &#xff08;文末可获取&#xff09; 1 GAN到Stable Diffusion的改朝换代2 从DDPM到Stable Diffusion发展史 2.1 DDPM 扩散过…

GNSS技术助力航海业迈向新时代:海洋测绘与航行的创新应用

全球导航卫星系统&#xff08;GNSS&#xff09;技术在海洋测绘与航行领域的广泛应用&#xff0c;正推动航海业迎来新一轮的科技变革。MinewSemi的GNSS模块为船舶导航、海洋资源勘探和航行安全提供了更为精确和高效的解决方案。本文将深入研究GNSS技术在海洋测绘与航行中的创新应…

代码随想录刷题第21天

第一题是二叉搜索树的最小绝对差&#xff0c;初始思路是中序遍历将二叉搜索树转换为有序数组&#xff0c;在有序数组中进行遍历。一遍过了。&#xff08;手机打代码真的麻烦&#xff09;看卡哥讲解会了双指针法遍历。 第二题是二叉搜索树中的众数&#xff0c;还是只想到了中序…

FPGA高端项目:Xilinx Artix7系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案我已有的FPGA视频拼接叠加融合方案本方案的Xilinx Kintex7系列FPGA上的ov5640版本本方案的Xilinx Kintex7系列FPGA上的HDMI版本 3、设计思路框架设计框图…

2024新技术:远距离的小目标也可以准确检测

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;计算机视觉研究院 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 Column of Computer Vision Institute 早期目标检测&#xff08;OD&#xff0c;object detection&#xff0…

FFmpeg和Monibuka拉取rtsp(大华摄像头)视频流时未进行URLCode编码导致提示404等报错

场景 Monibucav4(开源流媒体服务器)在Windows上搭建rtmp服务器并实现拉取rtsp视频流以及转换flv播放&#xff1a; Monibucav4(开源流媒体服务器)在Windows上搭建rtmp服务器并实现拉取rtsp视频流以及转换flv播放_monibuca 搭建流媒体服务-CSDN博客 Nginx搭建RTMP服务器FFmpeg…

【笔试常见编程题03】统计回文、连续最大和、不要二、把字符串转换成整数

1. 统计回文 “回文串”是一个正读和反读都一样的字符串&#xff0c;比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串&#xff0c;生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串…

SpringBoot 使用定时任务(SpringTask)

Spring3.0以后自带的task&#xff0c;可以将它看成一个轻量级的Quartz&#xff0c;而且使用起来比Quartz简单许多。 使用步骤&#xff1a; 1.导入坐标 在spring-boot-starter-web坐标中&#xff0c;就包含了SpringTask&#xff0c;所以一般的Web项目都包含了。 <depende…

【大厂AI课学习笔记】1.3 人工智能产业发展(4)——泛在的人工智能

人工智能走向泛在。 泛在&#xff0c;就是广泛存在。&#xff08;下图来自腾讯AI课。&#xff09; 没办法&#xff0c;被百度抛弃了&#xff0c;想学习&#xff0c;课程打不开&#xff0c;只好投想腾讯的怀抱。 之前考过腾讯云的认证&#xff0c;课程做的还是条理很清晰。 主…

重写Sylar基于协程的服务器(3、协程模块的设计)

重写Sylar基于协程的服务器&#xff08;3、协程模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

如何在FBX剔除Lit.shader依赖

1&#xff09;如何在FBX剔除Lit.shader依赖 2&#xff09;Unity出AAB包&#xff08;PlayAssetDelivery&#xff09;模式下加载资源过慢问题 3&#xff09;如何在URP中正确打出Shader变体 4&#xff09;XLua打包Lua文件粒度问题 这是第371篇UWA技术知识分享的推送&#xff0c;精…

央视见证|“看见中国汽车”走进首家汽车供应链企业东软睿驰

由工业和信息化部支持指导&#xff0c;中国汽车工业协会和央视网联合出品的2023《看见中国汽车》专题东软睿驰篇正式上线&#xff0c;记录品牌向上专项行动走进首家汽车供应链企业&#xff0c;展示东软睿驰围绕“成为OEM 软件定义汽车时代最可信赖的合作伙伴”核心战略的创新发…