api权限控制-annotation+postProcessor

本文介绍了一个SpringBoot的权限控制starter项目,通过在请求头中设置base64编码的权限信息,实现API的增删改查权限粒度控制。用户可以根据不同的权限值进行不同操作,如9代表查询和添加权限。通过在Controller上添加@Permission注解,AOP将在运行时检查权限。提供了一个Demo展示如何使用此权限系统,并通过Postman测试了权限验证。
摘要由CSDN通过智能技术生成

github地址: https://github.com/liuweidong-open/permission-starter/tree/master

设计思路:

  1. 增删改查对应1248 账号权限为 [权限资, 权限值累加, …]
  2. 每次请求时, 放在request header里, key为permission (base64)
  3. 创建starter项目 引入即可以创建此后置处理器
  4. bean生命周期时, 有@Permission的则aop (value & create == create 那么则有create权限)

举个例子: 用户相关api, 大致可以分为四个 分别为增删改查, 这个资源假如为authen.user, 如果给这个账号这个资源查询和添加的权限,那么就是8+1, 也就是9, 那么这个账号permission为 [{“resource”:“authen.user”, “action”:9}, …]

demo演示:

  1. 代码下载下来之后, 打包成jar包, 新建一个springboot项目加入这个依赖或者从私服maven引入.
    在这里插入图片描述
  2. 创建controller
@RestController
public class TestPermissionController {

    @RequestMapping("create")
    @Permission(resource = "authen.user", action = PermissionActionEnum.CREATE)
    public String create() {
        return "通过权限验证";
    }

    @RequestMapping("delete")
    @Permission(resource = "authen.user", action = PermissionActionEnum.DELETE)
    public String delete() {
        return "通过权限验证";
    }

    @RequestMapping("update")
    @Permission(resource = "authen.user", action = PermissionActionEnum.UPDATE)
    public String update() {
        return "通过权限验证";
    }

    @RequestMapping("query")
    @Permission(resource = "authen.user", action = PermissionActionEnum.QUERY)
    public String query() {
        return "通过权限验证";
    }
}
  1. 启动该springboot
  2. https://tool.oschina.net/encrypt?type=3 在线base64编码
    [{“resource”:“authen.user”, “action”:9}] ------------> 编码为: W3sicmVzb3VyY2UiOiJhdXRoZW4udXNlciIsICJhY3Rpb24iOjl9XQ==
  3. 打开postman 在header里添加permission
    在这里插入图片描述
  4. 先请求locahost:8080/create 和 locahost:8080/query 也就是9的action粒度权限
    输出如下:
    在这里插入图片描述
  5. 再进行 locahost:8080/delete 和 locahost:8080/update
    输出如下:
    在这里插入图片描述
    完美api权限粒度控.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K-means++是一种聚类算法,可以用于YOLOv7目标检测模型的Anchor Box聚类。Anchor Box是目标检测中用来预测物体位置和大小的一种技术,而聚类算法可以帮助我们确定Anchor Box的大小和数量。 下面是在YOLOv7代码中使用K-means++进行Anchor Box聚类的步骤: 1. 收集训练集中所有的标注框的宽度和高度。 2. 选择K个初始的Anchor Box,可以随机选取K个标注框作为初始值,也可以使用K-means++算法选择K个初始值。 3. 对于每个标注框,计算其与K个Anchor Box的距离,选择距离最近的Anchor Box,将该标注框归到该Anchor Box所在的簇中。 4. 计算每个簇的中心点,将中心点作为新的Anchor Box。 5. 重复步骤3和步骤4,直到Anchor Box的位置不再发生变化或达到预设的迭代次数。 6. 返回K个Anchor Box的位置和大小,将其用于YOLOv7模型中。 在YOLOv7代码中,可以在数据准备的阶段进行Anchor Box聚类,具体实现可以参考以下代码片段: ```python import numpy as np from sklearn.cluster import KMeans # 收集训练集中所有的标注框的宽度和高度 boxes = [] for annotation in annotations: for obj in annotation['object']: xmin = int(obj['xmin']) ymin = int(obj['ymin']) xmax = int(obj['xmax']) ymax = int(obj['ymax']) box_width = xmax - xmin box_height = ymax - ymin boxes.append([box_width, box_height]) # 使用K-means++算法选择K个初始值 kmeans = KMeans(n_clusters=K, init='k-means++', random_state=0) kmeans.fit(boxes) # 计算每个簇的中心点,将中心点作为新的Anchor Box anchors = kmeans.cluster_centers_ ``` 其中,annotations是训练集中所有的标注信息,K是我们需要聚类的Anchor Box数量。使用sklearn库中的KMeans函数进行聚类,可以指定聚类的数量K、初始值的选择方式、随机数种子等参数。最后得到的anchors是K个Anchor Box的位置和大小,可以用于YOLOv7模型中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值