Sa-Token拦截全部接口必须登录-然后自定义注解来匿名登录-作为权限框架支持,并且同时使用了注解和路由的拦截器模式,此部分的配置如下:
场景
在博主目前正在开发的项目中,就采用了Sa-Token作为权限框架支持,并且同时使用了注解和路由的拦截器模式,此部分的配置如下:
@Override
public void addInterceptors(InterceptorRegistry registry) { List<String> notMatches = CollectionUtil.newArrayList(); registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**"); registry.addInterceptor(new SaRouteInterceptor((req, res, handler) -> { SaRouter.match("/**").notMatch(notMatches).check(r -> StpUtil.checkLogin()); })).addPathPatterns("/**");
}
在上述的配置中代表除开notMatches中其他所有的路径都会进行StpUtil.checkLogin()方法来验证是否登录,如果没有登录则会未登录的异常。
但是有的时候又一个个去配置路径太麻烦了,特别是许多接口模块的情况下,于是采用允许匿名访问的注解模式就为一个不错的方法。
引入
首先我们需要新建一个注解,允许它在类及方法上使用:
/** * 匿名接口,提供SaToken中缺失的匿名注解访问 * * @author Licoy * */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD,})
public @interface AnonymousApi {
}
后面我们再到Sa-Token的拦截器配置中判断执行的方法是否含有此注解,如果有则使用SaRouter.stop()停止匹配,跳出函数。
现在我们修改一下上一小节中的代码:
@Override
public void addInterceptors(InterceptorRegistry registry) { List<String> notMatches = CollectionUtil.newArrayList(); registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**"); registry.addInterceptor(new SaRouteInterceptor((req, res, handler) -> { if (handler instanceof HandlerMethod) { Method method = ((HandlerMethod) handler).getMethod(); if (method.getAnnotation(AnonymousApi.class) != null || method.getDeclaringClass().getAnnotation(AnonymousApi.class) != null) { SaRouter.stop(); } } SaRouter.match("/**").notMatch(notMatches).check(r -> StpUtil.checkLogin()); })).addPathPatterns("/**");
}
至此,我们就可以愉快的使用@AnonymousApi来允许接口的匿名访问了。
后记
在权限框架中,我们会有很多的特殊路径权限,不得不说Sa-Token为我们提供了一种方便快捷的方式,我看了文档几分钟就完全配置出来了,要是按照以前使用Shiro或者Spring Security,至少都要以天为单位(又或者是因为现在的经验甚比以前了)
相关文章:
Sa-Token拦截全部接口必须登录-然后自定义注解来匿名登录-作为权限框架支持,并且同时使用了注解和路由的拦截器模式,此部分的配置如下:
场景 在博主目前正在开发的项目中,就采用了Sa-Token作为权限框架支持,并且同时使用了注解和路由的拦截器模式,此部分的配置如下: Override public void addInterceptors(InterceptorRegistry registry) { List<String> n…...
公司企业端口映射
文章目录 前言如何进行内网映射打开路由器管理网址设置端口映射 前言 公司为了提供稳定的网络服务,需要拥有一个稳定的IPV4的网络地址,一般公司有点规模的,会去电信局里面拉一根专门的网线,获取稳定的全球IPV4地址。 一个IPV4地…...
gitlab安装和使用
gitlab安装和使用 1.下载必要的依赖 sudo yum install curl openssh-server openssh-clients postfix cronie #需要执行sudo service postfix start #配置邮箱的sudo chkconfig postfix on #配置邮箱的#这句是用来做防火墙的,避免用户通过ssh方式和http来访问。su…...
【论文阅读】DALL·E: Zero-Shot Text-to-Image Generation
OpenAI第一代文本生成图片模型 paper:https://arxiv.org/abs/2102.12092 DALLE有120亿参数,基于自回归transformer,在2.5亿 图片-文本对上训练的。实现了高质量可控的text to image,同时也有zero-shot的能力。 DALL-E没有使用扩…...
说一下 toRef、toRefs,以及他们的区别
toRef:创建一个新的Ref变量,转换Reactive对象的某个字段为Ref变量 toRefs:创建一个新的对象,它的每个字段都是Reactive对象各个字段的Ref变量 说一下toRef 先定义一个reactive对象 interface Member {id: numbername: string } c…...
修改Android Studio默认的gradle目录
今天看了一下,gradle在C盘占用了40多G。我C盘是做GHOST的,放在这里不方便。所以就要修改。 新建目录名(似乎无必要) ANDROID_SDK_HOMEG:\SOFTWARES\android-sdk GRADLE_USER_HOMEG:\SOFTWARES\.gradle 修改目录 File->Setti…...
鲁大师电动车智能化测评报告第二十三期:实测续航95km,九号Q90兼顾个性与实用
鲁大师第二十三期智能化电动车测评排行榜数据来源于鲁大师智慧实验室,测评的车型均为市面上主流品牌的主流车型。截止目前,鲁大师智能化电动车测评的车型高达130余台,且还在不断增加和丰富中。 一、测评依据 鲁大师电动车智能化测评体系包含车辆的状态采集与管理硬件系统、车辆…...
初始化项目骨架(Web3项目一实战之一)
暌违将近一年的时光,也该是时候来几个项目实践。要不,当再次翻看 玩以太坊链上项目的必备技能(…solidity之旅X) ,却未曾见有关于 Web3 项目的实战博文,不免让人唏嘘! 其实,在我敲下玩以太坊链上项目的必备技能这些文字时,心中早有了势必要弄出一个Web3的项目(当然,通…...
在opencv OpenCV中打开相机摄像头,用分水岭算法实时实现图像的分割与提取
import cv2 import numpy as np# 定义回调函数 def callback(x):pass# 打开摄像头 cap cv2.VideoCapture(0)# 创建窗口和控件 cv2.namedWindow(image) cv2.createTrackbar(threshold, image, 0, 255, callback)# 初始化参数 bgdModel np.zeros((1, 65), np.float64) fgdModel…...
CodeWhisperer 的正确使用
1、重点: 重点1: 推出 Amazon Bedrock。这项新服务允许用户通过 API 访问来自 AI21 Labs、Anthropic、Stability AI 和亚马逊的基础模型。(Anthropic 就是之前跟 ChatGPT 掰手腕的 Claude 的模型。Stability AI 就是 Stable Diffusion 背后的…...
selenium xpath定位
selenium-xpath定位 <span style"background-color:#2d2d2d"><span style"color:#cccccc"><code class"language-javascript">element_xpath <span style"color:#67cdcc"></span> driver<span styl…...
「我在淘天做技术」音视频技术及其在淘宝内容业务中的应用
作者:李凯 一、前言 近年来,内容电商似乎已经充分融入到人们的生活中:在闲暇时间,我们已经习惯于拿出手机,从电商平台的直播间、或者短视频链接下单自己心仪的商品。 尽管优质的货品、实惠的价格、精致的布景、有趣的…...
el-input 输入后失去焦点
说了是无情,写了更无情,你说你看了不点赞是不是更绝情?遇到这种神奇的BUG,也是大家无奈的神情。 来分析看代码: <div class"card-item input-item" :class"{ w-100: followRadio 2 }"v-for&…...
docker创建并访问本地前端
docker创建并访问本地前端,直接上命令: 安装nginx镜像: docker pull nginx 查看已安装的nginx: docker images 创建DockerFile文件,直接在当前文件夹种创建 touch Dockerfile 在Dockerfile写入内容: F…...
数据结构之单链表基本操作
🤷♀️🤷♀️🤷♀️ 今天给大家分享的是单链表的基本操作。 清风的个人主页 🎉欢迎👍点赞✍评论❤️收藏 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位…...
Python 实践
文章目录 一、HttpRequests 一、Http Requests python——Request模块...
使用easyui前端框架快速构建一个crud应用
本篇文章将会详细介绍jquery easyui前端框架的使用,通过创建一个crud应用来带大家快速掌握easyui的使用。 easyui是博主最喜欢的前端框架,没有之一,因为它提供了多种主题,而且有圆润的各种组件。 一、快速开始 easyui的官网地址&…...
Logback从添加依赖,到配置给中打印级别,archive相关信息配置,在项目中的常见的用法,一个完整的过程
添加Logback依赖: 在您的Maven或Gradle项目中,添加Logback依赖。例如,在Maven中,可以将以下依赖添加到pom.xml文件中: <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-c…...
虚假内容检测,谣言检测,不实信息检测,事实核查;纯文本,多模态,多语言;数据集整理
本博客系博主个人理解和整理所得,包含内容无法详尽,如有补充,欢迎讨论。 这里只提供数据集相关介绍和来源出处,或者下载地址等,因版权原因不提供数据集所含的元数据。如有需要,请自行下载。 “Complete d…...
数据结构:单链表
文章目录 🍉前言🍉基本概念🍉链表的分类🍌单链表节点的结构🍌创建节点🍌打印链表🍌插入和删除🥝尾插🥝头插🥝尾删🥝头删🥝指定位置之前…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
