对接SaToken @SaCheckEL 鉴权注解
对接SaToken @SaCheckEL 鉴权注解
文章目录
- 对接SaToken @SaCheckEL 鉴权注解
- 前言
- 一、引入插件和配置SaToken属性配置
- 二、配置
- 1.自定义SaTokenInterceptor并注入Bean
- 2.WebMvcConfig配置SaTokenInterceptor,拦截所有请求路径
- 三、重载SaToken权限接口和方法注入@SaCheckEL
- 1.重载SaToken权限接口
- 2.控制层注入@SaCheckEL
前言
原生SpringBoot 2.6.3、Spring 5.3.25(JDK8) 框架系统 对接SaToken 身份认证,使用 SpEL 表达式进行资源请求的鉴权。
一、引入插件和配置SaToken属性配置
<!-- Sa-Token 权限认证,用于启动SaTokenContext实现 --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot-starter</artifactId><version>1.40.0</version></dependency><!-- Sa-Token 注解鉴权使用 EL 表达式 --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-el</artifactId><version>1.40.0</version></dependency>
sa-token:# token前缀token-prefix: Bearer# token名称 (同时也是cookie名称)token-name: Token# token有效期,单位s 默认12小时, -1代表永不过期timeout: 43200# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒active-timeout: -1# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)is-concurrent: true# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)is-share: false# token风格token-style: uuid# 是否输出操作日志is-log: false
二、配置
1.自定义SaTokenInterceptor并注入Bean
SaTokenInterceptor类
@Component
@Slf4j
public class SaTokenInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {log.debug("------------>进入拦截器SaTokenInterceptor:{}", handler.toString());response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");response.setHeader("Access-Control-Max-Age", "86400");response.setHeader("Access-Control-Allow-Headers", "*");response.setCharacterEncoding("UTF-8");response.setContentType("application/json;charset=UTF-8");//当请求路径包含/doc.html(swagger文档),跳过Token验证if ( swaggerDocSkipToken(request.getRequestURI())) {return true;}String token = request.getHeader("satoken");String baseToken = request.getHeader("token");SaSession tokenSession = null;if (StrUtil.isEmpty(baseToken) || StrUtil.isEmpty(token)) {PrintWriter out = response.getWriter();QuantdoResponse resp = new QuantdoResponse();log.info("SaTokenInterceptor:Satoken=" + token + ",Token=" + baseToken + "为空!");resp.setCode(OrderNotLoginException.TOKEN_TIMEOUT_CODE);resp.setMessage(OrderNotLoginException.TOKEN_TIMEOUT_MESSAGE);out.append(JSONObject.toJSONString(resp));return false;}if (StrUtil.isNotBlank(token)) {tokenSession = StpUtil.getTokenSessionByToken(token);}if (tokenSession != null ) {Long userId = (Long) tokenSession.getLoginId(); return true;} else {PrintWriter out = response.getWriter();QuantdoResponse resp = new QuantdoResponse();log.info("SaTokenInterceptor:未获取到登录用户信息!"); resp.setCode(OrderNotLoginException.NOT_VALID_EMP_CODE);return false;}}else{PrintWriter out = response.getWriter();QuantdoResponse resp = new QuantdoResponse();log.info("SaTokenInterceptor:未获取到令牌satoken!");resp.setCode(OrderNotLoginException.TOKEN_TIMEOUT_CODE);out.append(JSONObject.toJSONString(resp));return false;}}//Swagger Docpublic static final boolean swaggerDocSkipToken(String requestURL){if (requestURL.contains("/doc.html") || requestURL.contains(".js") || requestURL.contains(".css")|| requestURL.contains(".ico") || requestURL.contains("/swagger-resources")|| requestURL.contains("/api-docs") ) {return true;}else{return false;}}
}
SaTokenConfig 类注入SaTokenInterceptor Bean
package com.isoftstone.order.service.config;
import com.isoftstone.order.service.interceptor.SaTokenInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SaTokenConfig {@Beanpublic SaTokenInterceptor getSaTokenInterceptor() {return new SaTokenInterceptor();}
}
2.WebMvcConfig配置SaTokenInterceptor,拦截所有请求路径
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Autowiredprivate SaTokenInterceptor saTokenInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(saTokenInterceptor).addPathPatterns("/**") // 拦截所有请求路径.excludePathPatterns("/login", "/assets/**"); // 排除登录和注册接口}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();ObjectMapper objectMapper = new ObjectMapper();SimpleModule module = new SimpleModule();module.addSerializer(Long.class, ToStringSerializer.instance);module.addSerializer(Long.TYPE, ToStringSerializer.instance);objectMapper.registerModule(module);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);converter.setObjectMapper(objectMapper);converters.add(0,converter);}
}
三、重载SaToken权限接口和方法注入@SaCheckEL
1.重载SaToken权限接口
/*** @Description 工单权限校验,完成 Sa-Token 的自定义权限验证扩展* @Date 2025/2/18 16:11* @Created by chenjun*/
@Component
@Slf4j
public class OrderStpInterfaceImpl implements StpInterface {@Autowiredprivate UserAndRoleService userAndRoleService;@Resourceprivate StringRedisUtil stringRedisUtil;public static final String env = "test";//'local'环境跳过Permission认证/*** 通过用户id查询用户基础资源表code集合,单个资源表code如:tenant:tenant:user:add* @param loginId 账号id:登录defUser实体id* @param loginType 账号类型* @return "tenant:tenant:user|tenant:tenant:user:query|tenant:tenant:user:add|tenant:tenant:user:delete|tenant:tenant:user:edit";**/@Overridepublic List<String> getPermissionList(Object loginId, String loginType) {List<String> resourceCodes = userAndRoleService.getMenuResourceCodeByUser(loginId);return resourceCodes;}@Overridepublic List<String> getRoleList(Object loginId, String loginType) {return null;}
}
2.控制层注入@SaCheckEL
用户控制层UserRest 注入@SaCheckEL
@Api(tags = {"用户控制层"})
@RestController
@RequestMapping("/userRest/")
public class UserRest {@Autowiredprivate UserService userService;//用户查询@SaCheckEL("stp.checkPermission('tenant:tenant:user:query')")@GetMapping("")public List<OrderWorkListResp> query(){.....}//用户增加@SaCheckEL("stp.checkPermission('tenant:tenant:user:add')")@PostMapping("")public boolean add(User vo){.....}//用户编辑@SaCheckEL("stp.checkPermission('tenant:tenant:user:edit')")@PutMapping("")public boolean edit(User vo){.....}
}
注明:
多个权限注入方法@SaCheckEL(“stp.checkPermissionOr(‘tenant:tenant:user:query’,‘tenant:tenant:user:add’)”)
@SaCheckEL(“stp.checkPermissionAnd(‘tenant:tenant:user:query’,‘tenant:tenant:user:add’)”)
参考 SpEL 表达式注解鉴权
相关文章:
对接SaToken @SaCheckEL 鉴权注解
对接SaToken SaCheckEL 鉴权注解 文章目录 对接SaToken SaCheckEL 鉴权注解前言一、引入插件和配置SaToken属性配置二、配置1.自定义SaTokenInterceptor并注入Bean2.WebMvcConfig配置SaTokenInterceptor,拦截所有请求路径 三、重载SaToken权限接口和方法注入SaCheck…...
【数据结构】顺序表(附源码)
数据结构之顺序表 1、线性表2、顺序表2.1 概念与结构2.2 顺序表的分类 3、动态顺序表3.1 结构3.2 初始化3.3 容量检查3.4 尾部插入数据3.5 删除尾部数据3.6 头部插入数据3.7 头部删除数据3.8 任意位置pos插入数据3.9 任意位置pos删除数据3.10 查找 4、动态顺序表实现的源码 1、…...
java使用Apache POI 操作word文档
项目背景: 当我们对一些word文档(该文档包含很多的标题比如 1.1 ,1.2 , 1.2.1.1, 1.2.2.3)当我们删除其中一项或者几项时,需要手动的对后续的进行补充。该功能主要是对标题进行自动的补充。 具…...
【Linux网络编程】网络基础
目录 1、OSI分层思想2、数据的封装3、ip地址ipv4的ip地址分类:为什么这样划分?举例 4、端口号5、tcp三次握手为什么需要三次握手?tcp连接的标识为什么 IP 地址不能单独标识一条连接? 6、tcp四次挥手为什么需要四次挥手为什么需要三…...
国内首家,百度智能云千帆AppBuilder全面兼容MCP协议
百度智能云千帆 AppBuilder 已兼容 MCP 协议!作为国内首家支持 MCP 协议的大模型应用开发平台(Claude、LangGraph、Cursor、Cline、N8N等海外平台已支持),千帆 AppBuilder 完成兼容后,用户可通过千帆 AppBuilder 轻松调…...
eclipse [jvm memory monitor] SHOW_MEMORY_MONITOR=true
eclipse虚拟机内存监控设置SHOW_MEMORY_MONITORtrue D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings org.eclipse.ui.prefs (文件比较多,别找错了) SHOW_MEMORY_MONITORtrue 重启 -xms 1024…...
k8s中的组件
1.namespace Namespace 用于将集群资源划分为不同的逻辑组,方便管理和隔离 kubectl get namespace 查看所有逻辑组 kubectl describe namespace <namespace-name> 查看某个逻辑组信息详情 kubectl create namespace ... 创建逻辑组 kubectl delete names…...
单目3d detection算法记录
1、centernet object as points 这篇文章的核心单目3d检测主要是利用中心点直接回归出3d模型的所有属性,head共享整个backbone,其中3d属性包括:2d目标中心点、2dw和h、2d offsets、3doffsets、3d dimmession、rot还有depth。 其中对应的dep…...
vue3二次封装tooltip实现el-table中的show-overflow-tooltip效果
开发过程中遇到需要根据后端返回的数据长度来判断是否需要使用el-tooltip的情况,想到el-table里面就有这种交互效果,如果不论文字是否超出容器长度都展示tooltip的话,交互效果难免会差很多,所以二次封装了这个组件: 给…...
STM32八股【1】-----启动流程和startup文件理解
启动流程 知识点 MCU 上电复位。MSP从向量表第0个地址读取一个32位(2字节)的值并保存,该值为栈顶地址。PC计数器从第1个地址读取一个两字节的值并保存,该值为程序入口,一般是Reset_Handler。想了解FLASH地址映射可以…...
Go语言中package的使用规则《二》
在 Go 语言中,包(Package) 是代码组织和复用的核心单元。以下是其定义、引用规则及使用习惯的详细说明: 一、包的定义规则 目录与包名 一个包对应一个目录(文件夹),目录名通常与包名一致。 包名…...
初级:控制流程面试题精讲
一、引言 在Java开发中,控制流程语句是构建程序逻辑的基础。面试官通过相关问题考察候选人对if-else、switch、循环等语句的理解和运用能力,以及在复杂业务场景下合理选择控制流程语句的水平。本文将深入剖析常见的控制流程面试题,结合实际开…...
HTTP 失败重试(重发)方案
在 Qt 网络开发中,使用 QNetworkAccessManager 进行 HTTP 请求时,可能会遇到网络超时、服务器错误等情况。为了提高请求的可靠性,可以实现 HTTP 失败重试(重发) 机制。下面介绍几种常见的 失败重发方案: 单…...
TNNLS 2024 | 基于残差超密集网络的高光谱图像空间光谱融合方法
A Spatio-Spectral Fusion Method for Hyperspectral Images Using Residual Hyper-Dense Network IEEE Transactions on Neural Networks and Learning Systems 2024 这篇文章的研究背景是针对高光谱图像(HS)与全色图像(PAN)的…...
深入探究 JVM 堆的垃圾回收机制(二)— 回收
GC Roots 枚举需要遍历整个应用程序的上下文,而在进行可达性分析或者垃圾回收时,如果我们还是进行全堆扫描及收集,那么会非常耗时。JVM 将堆分为新生代及老生代,它们的回收频率及算法不一样。 1 回收算法 在进行可达性分析时&am…...
【ELK】节省存储 之 压缩存储方式调整
目录 集群版本: 7.17.6 解释几个概念: 段(Segment) 合并(Merge) 索引设置: 压缩方式(index.codec): 测试设置前提条件 对比 在创建的时候指定压缩类型(index.codec) 对比 在…...
MATLAB 控制系统设计与仿真 - 26
状态空间控制系统概述 状态空间描述 现代控制理论是建立在状态空间基础上的控制系统分析和设计理论,它用状态变量来刻画系统的内部特征,用‘一节微分方程组’来描述系统的动态特性。系统的状态空间模型描述了系统输入/输出与内部状态之间的关系&#x…...
下载与快速上手 NVM:Node.js 版本管理工具
一、准备工作:卸载旧版 Node.js 重要提示:在安装 NVM 前,请先彻底删除已安装的 Node.js,避免路径冲突: 检查安装路径 bash where node常见路径: C:\Program Files\nodejs\C:\Users\用户名\AppData\Local\n…...
SQL Server Management Studio(SSMS)安装教程
目录 一、SSMS的下载 二、SSMS 的安装 三、连接服务器 四、卸载 SSMS 一、SSMS的下载 1.进入 SQL Server Management Studio 官方下载页面:SQL Server Management Studio点击进入下载页面 2.点击链接开始下载,浏览器右上角会显示下载进度;…...
运维知识:Linux下Vim编辑器使用详解
运维知识:Linux下Vim编辑器使用详解 引言 在Linux的世界里,Vim不仅仅是一个文本编辑器,更是程序员的「瑞士军刀」。从1991年Bram Moolenaar发布第一个版本至今,Vim以其高效的模态编辑、高度可定制性和跨平台兼容性,成…...
复习HCIA
一、网络基础概念 1. OSI七层模型与TCP/IP四层模型 OSI七层模型详解: 物理层(Physical Layer): 功能:传输原始比特流(0/1),定义电气、机械特性(如电压、线缆类型&#…...
在QT中进行控件提升操作
目录 一、概述 二、功能需求 三、提升操作 1)拖入标准控件 2)自定义类 3)提升控件 一、概述 QT中提供的标准控件能够满足我们大多数情况下的功能需求,但是在一些特殊应用场合,我们可能需要对控件的功能进行扩展&am…...
Linux下JDK1.8安装配置
目录 1.下载完上传到Linux系统中 2.解压JDK压缩包 3.配置JDK环境变量 4.设置环境变量生效 5.查看环境变量是否配置成功 官网下载地址:Java Downloads | Oracle 1.下载完上传到Linux系统中 2.解压JDK压缩包 tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local (解压…...
JVM 知识点梳理
JDK 、JRE、JVM JDK( Java Development Kit ) Java开发工具包 JRE 开发命令工具(运行java.exe、编译javac.exe、javaw.exe) JRE( Java Runtime Environment )Java运行环境 JVM Java核心类库(l…...
求职招聘网站源码,找工作招工系统,支持H5和各种小程序
招聘找活招工平台系统源码 招聘求职找工作软件 发布信息积分充值招聘系统,里面带纤细教程 功能介绍: 招工小程序主要针对工地招工工人找工作,工地可以发布招工信息,工人可以发布找活信息,招工信息可以置顶,置顶需要积分,积分可以通过签到、分享邀请好友、充值获取,后…...
拓展 Coco AI 功能 - 智能检索 Hexo 博客
在之前的文章中,我们成功让 Coco AI 检索 Hugo 博客,这对于博客作者来说是一大福音。然而,从 Hexo 迁移到 Hugo 的成本不容小觑,毕竟大多数开发者对 Node.js 更熟悉,而 Golang 相对陌生。那么,既然 Coco AI…...
深入解析 Java Stream API:从 List 到 Map 的优雅转换!!!
🚀 深入解析 Java Stream API:从 List 到 Map 的优雅转换 🔧 大家好!👋 今天我们来聊聊 Java 8 中一个非常常见的操作:使用 Stream API 将 List 转换为 Map。🎉 具体来说,我们将深入…...
【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现全局状态管理
前言 在现代应用程序开发中,状态管理是构建复杂且可维护应用的关键。随着应用程序规模的增长,组件之间共享和同步状态变得越来越具有挑战性。如果处理不当,状态管理可能会导致代码混乱、难以调试,并最终影响应用程序的性能和可扩…...
金桔网桥路由版3
上一集我们讲到了二层云交换机,我把在云上搭建的桥接模式的VPN服务器称为二层云交换机。 那么现在我家到办公室的网络结构就变成这样的, 这样的好处就是我的电视盒子通过网线看电视,走的是OpenWrt路由器通过二层云交换机由办公室的OpenWrt路由…...
前沿分享|处理LLM幻觉问题-CoN|笔记链:增强检索增强语言模型的鲁棒性
检索增强语言模型(RALMs)在大型语言模型的能力方面取得了重大进步,特别是在减少事实幻觉方面,这得益于外部知识来源的利用。 然而,检索到的信息的可靠性并不总是有保证。 检索到无关数据可能导致误导性回答ÿ…...
OpenWrt开发第4篇:设置开发板的IP-基于Raspberry Pi 4B开发板
文/指尖动听知识库-谷谷 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:Openwrt开发-基于Raspberry Pi 4B开发板 有时候开发过程中经常会使用其他路由器,很多时候固件烧上去之后板子IP基本都是192.168.1.1,这时就需要修改板子的IP,下面介绍一下板…...
浅谈跨平台框架的演变(H5混合开发->RN->Flutter)
引言 这里分为四个阶段: 第一阶段 : 原生开发 第二阶段 : H5混合开发 第三阶段: 跨平台RN 第四阶段: 跨平台Flutter 正文 第一阶段: 原生开发 开发成本比较大 : 需要Android 和ios 开发两…...
Android数据加密方案
Android数据加密方案 前言 在移动应用开发中,数据安全是一个永恒的话题。Android应用中往往需要存储和传输敏感数据,如用户密码、支付信息、个人隐私等。本文将深入介绍Android平台上的数据加密方案,帮助开发者构建安全可靠的数据保护机制。 基础知识 1. 加密算法分类 …...
深入理解traceroute命令及其原理
traceroute 是一个网络诊断工具(Windows上叫tracert),用于显示数据包从本地主机到远程主机经过的路由(跳数)。它可以帮助您了解数据包在网络中的传输路径,以及每跳的延迟情况。这对于网络故障排除、分析网络…...
PostgreSQL_安装
目录 前置: 安装过程: 1 下载软件 2 创建安装文件夹和放置数据的文件夹 3 双击安装 4 连接服务 前置: PostgreSQL 15 windows 10 专业版 安装过程: 1 下载软件 PostgreSQL: Downloads 大小326MB 2 创建安装文件夹和放…...
leetcode684.冗余连接
依旧是并查集问题,这道题目正好给定顶点数目和边的数目相等,只要找到其中的一条边删除将图转化为树就行,而这个多余的边起始就是并查集的添加过程中二者是同一个根(两个顶点早已经联通了),这时直接返回这条…...
Python学习第二十一天
爬虫 概念 网络爬虫(Web Crawler),也称为网络蜘蛛(Web Spider),是一种自动化程序,用于从互联网上抓取数据。爬虫通过模拟浏览器行为,访问目标网站并提取所需的信息,然后…...
matlab近似计算联合密度分布
在 Matlab 中,当A和B是两个序列数据时,可以通过以下步骤来近似求出A大于B的概率分布:数据准备:确保序列A和B具有相同的长度。如果长度不同,需要进行相应的处理(例如截取或插值)。计算A大于B的逻…...
OpenCV图像处理基础2
接着上一篇OpenCV图像处理基础1继续说。 图像阈值处理 1、简单阈值处理 ret, thresholded_image = cv2.threshold(image, thresh, maxval, cv2.THRESH_BINARY)thresh 是阈值,maxval 是最大值。 2、自适应阈值处理 thresholded_image = cv2.adaptiveThreshold(image, maxv…...
Prometheus Exporter系列-Mysql_Exporter一键部署
新项目旧项目都需要给研发配置mysql监控,这里mysql监控对应aws 阿里云 腾讯云 华为云的云mysql产品或开源自建mysql。 exporter安装虽然简单,经常手动操作不免让人心烦,一键完成省去繁琐的常规操作。 配置信息对的情况下测试多次都可以正常安…...
A l密码学(Deepseek)
我:qwertyuiopasdfghjklzxcvbnm deepseek:深度思考中. Okay, lets see. The user input is "qwertyuiopasdfghjklzxcvbnm". At first glance, it looks like a jumbled sequence of letters with some spaces or maybe other characters in …...
「Java-API帮助文档」
「Java-API帮助文档」,链接:https://pan.quark.cn/s/d7ced3b48f33 java.applet提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。java.awt包含用于创建用户界面和绘制图形图像的所有类。java.awt.color提供用于颜色空间的类。java…...
卷积神经网络 - 梯度和反向传播算法
在卷积网络中,参数为卷积核中权重以及偏置。和全连接前馈网络类似,卷积网络也可以通过误差反向传播算法来进行参数学习。本文我们从数学角度,来学习卷积神经网络梯度的推导和其反向传播算法的原理。 一、梯度:损失函数 L 关于第 …...
ripro 主题激活 问题写入授权Token失败,可能无文件写入权限
ripro 主题激活 问题 写入授权Token失败,可能无文件写入权限 找到主题下面的functions.php文件,给其他写入权限。就好了。...
MySQL 中,查看执行频次、慢查询日志、SHOW PROFILE和 EXPLAIN性能分析和优化
在 MySQL 中,查看执行频次、慢查询日志、SHOW PROFILE 和 EXPLAIN 是性能分析和优化的核心工具。以下是它们的详细用法和高级语法: 一、查看 SQL 执行频次 通过 SHOW STATUS 命令可以查看 SQL 的执行频次,帮助定位高频查询。 1. 查看全局 SQL 执行频次 SHOW GLOBAL STATU…...
Springdoc 全部注解一文解释清楚
文章目录 **1. 核心注解****Tag-Class类上** **2. 方法级别注解****Operation-方法描述****ApiResponse 和 ApiResponses-方法的返回结果** **3. 参数相关注解****Parameter-方法参数****Parameters方法参数(单个)** **4. 实体模型相关注解****Schema-描…...
1.angular介绍
初級使用视频添加链接描述 angular工具 angular.module(‘名’, [依赖模块]) 模块 angular.bind(*) : 修改this指向 angualr.copy() // a angular.copy(a, b) —a完全覆盖了b,c就是a angular.extend(a, b) a里面集成了b属性 angular.isArray angular.isDate angular.isDefin…...
StarRocks vs Doris:深度剖析与选型分析
StarRocks vs Doris:深度剖析与选型分析 在大数据技术蓬勃发展的当下,企业对于高效的数据分析工具的需求日益增长。StarRocks 和 Doris 作为两款优秀的 MPP(大规模并行处理)数据库,在数据仓库和数据分析领域备受关注。…...
Ambari、Bigtop源码编译最新支持情况汇总
以下是目前的版本情况 支持了绝大部分的组件编译及安装 版本组件名称组件版本env 版本v1.0.5Ozone1.4.11.0.5Impala4.4.11.0.5Nightingale7.7.21.0.5Categraf0.4.11.0.5VictoriaMetrics1.109.11.0.5Cloudbeaver24.3.31.0.5Celeborn0.5.31.0.5v1.0.4Doris2.1.71.0.4v1.0.3Phoen…...
【sql靶场】第23、25,25a关过滤绕过保姆级教程
目录 【sql靶场】第23、25-28关过滤绕过保姆级教程 第二十三关 第二十五关 1.爆出数据库 2.爆出表名 3.爆出字段 4.爆出账号密码 【sql靶场】第23、25,25a关过滤绕过保姆级教程 第二十三关 从本关开始又是get传参,并且还有了对某些字符或字段的过…...