swagger关闭/v2/api-docs仍然可以访问漏洞
今天接到安全团队的说swagger有未授权访问漏洞,即使在swagger关闭的情况下http://127.0.0.1:8086/agcloud/v2/api-docs?group=%E7%94%A8%E6%88%B7%E5%85%B3%E8%81%94%E4%BF%A1%E6%81%AF%E6%A8%A1%E5%9D%97仍然还能访问。
看了下原来是有写一个拦截器
registry.addInterceptor(loginInterceptor).addPathPatterns("/v2/api-docs");registry.addInterceptor(loginInterceptor).addPathPatterns("/swagger-ui.html");
断点之后发现是有生效的,/swagger-ui.html不能再访问,但是/v2/api-docs路径还是可以访问,确定拦截器有生效,不是拦截器的问题。
查看基于springMVC请求入口找到DispatcherServlet类,找到doDispatch方法

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {......try {// HandlerMapping根据请求路径选择对应的handler(controller下的某个方法)来处理当前请求// 补充下HandlerMapping:// 1. 根据当前请求的找到对应的 Handler,// 2. 将 Handler(执行程序)与一堆 HandlerInterceptor(拦截器)封装到 HandlerExecutionChain 对象中// 3. DispatcherServlet会从容器中取出所有HandlerMapping实例并遍历,让HandlerMapping实例根据自己实现类的方式去尝试查找HandlermappedHandler = getHandler(processedRequest);......// 根据handler来找到支持它的HandlerAdapter,通过HandlerAdapter执行这个最后的代码处理逻辑得到具体的返回结果HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());......// 拦截器preHandle处理,按顺序执行if (!mappedHandler.applyPreHandle(processedRequest, response)) {return;}// handlerAdapter实际的执行逻辑mv = ha.handle(processedRequest, response, mappedHandler.getHandler());......// 拦截器postHandle处理mappedHandler.applyPostHandle(processedRequest, response, mv);} catch (Throwable err) {......} finally {......}
}
在doDispatch方法中,拦截器的preHandle执行逻辑在mappedHandler.applyPreHandle中,接下来我看下这个方法:
boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {// 遍历handler绑定的所有interceptors,按顺序执行preHanlde方法for (int i = 0; i < this.interceptorList.size(); i++) {HandlerInterceptor interceptor = this.interceptorList.get(i);// 如果preHandle返回false,则触发afterCompletion方法的执行if (!interceptor.preHandle(request, response, this.handler)) {triggerAfterCompletion(request, response, null);return false;}this.interceptorIndex = i;}return true;}
debug跟踪到这个方法,发现applyPreHandle方法中this.interceptorList的长度为0,即处理该请求的handler没有绑定任何interceptor。这个时候很容易想到问题可能出现在handlerMapping上,因为handlerMapping负责将handler与一堆 handlerInterceptor(拦截器)封装到 HandlerExecutionChain 对象中
doDispatch中的getHandler方法断点

参考:记一次自定义拦截器失效的问题排查 - 简书
相关文章:
swagger关闭/v2/api-docs仍然可以访问漏洞
今天接到安全团队的说swagger有未授权访问漏洞,即使在swagger关闭的情况下http://127.0.0.1:8086/agcloud/v2/api-docs?group%E7%94%A8%E6%88%B7%E5%85%B3%E8%81%94%E4%BF%A1%E6%81%AF%E6%A8%A1%E5%9D%97仍然还能访问。 看了下原来是有写一个拦截器 registry.addI…...
k8s pod调度总结
在Kubernetes平台上,我们很少会直接创建一个Pod,在大多数情况下会通过控制器完成对一组Pod副本的创建、调度 及全生命周期的自动控制任务,如:RC、Deployment、DaemonSet、Job 等。本文主要举例常见的Pod调度。1全自动调度功能&…...
28个案例问题分析---10---对生产环境的敬畏--生产环境
一:背景介绍 1:上午9:23,老师没有进行上课,但是却又很多的在线人员,并且在线人员的时间也不正确。 2:开发人员及时练习用户,查看用户上课情况。 3:10点整,询问项目组长发…...
视觉SLAM十四讲ch7-1视觉里程计笔记
视觉SLAM十四讲ch7-1 视觉里程计笔记本讲目标从本讲开始,开始介绍SLAM系统的重要算法特征点法ORB特征BRIEF实践特征提取与匹配2D-2D:对极几何八点法求E八点法的讨论从单应矩阵恢复R,t小结三角化。 符号读作*指向AA的指针(总在左侧)[]容纳AA的数组(总在左侧)()返…...
bash编程(马哥)
bash基础特性: 命令行展开:~,{} 命令别名:alias,unalias 命令历史:history 命令和路径补全:$PATH glob通配符:*,?,[],[^], 快捷键&am…...
搭建Gerrit环境Ubuntu
搭建Gerrit环境 1.安装apache sudo apt-get install apache2 注意:To run Gerrit behind an Apache server using mod_proxy, enable the necessary Apache2 modules: 执行:sudo a2enmod proxy_http 执行:sudo a2enmod ssl 使新的配置生效,需要执行如下命令:serv…...
朋友去华为面试,轻松拿到26K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…...
springboot项目如何配置启动端口
文章目录0 写在前面1 配置文件(.yaml)--推荐2 配置文件(.properties)3 IDEA配置--不推荐4 写在最后0 写在前面 项目启动需要一个独立的端口,所以在此记录一下。 根据配置文件的后缀书写格式略有不同。 1 配置文件(.yaml)–推荐 若是.yaml后缀的配置文件࿰…...
IOS - 抓包通杀篇
IOS中大多数情况,开发者都会使用OC提供的api函数,CFNetworkCopySystemProxySettings来进行代理检测; CFNetworkCopySystemProxySettings 检测函数直接会检测这些ip和端口等: 采用直接附加页面进程: frida -UF -l 通…...
盒子模型的简介
盒子的组成 一个盒子由外到内可以分成四个部分:margin(外边距)、border(边框)、padding(内边距)、content(内容)。会发现margin、border、padding是css属性,因…...
Kubernetes 101,第二部分,pod
在上一篇文章中,我们了解了Kubernetes 的基础知识以及对其主要架构的介绍。 介绍完毕后,就该探索如何在 Kubernetes 中运行应用程序了。 容器包装器 在 Kubernetes 中,我们无法直接创建单个容器。相反,为了更好,我们可以将容器包装成一个单元,其中包括: 规范:多个容器可…...
protobuf序列化解码原理
Protobuf的编码方式 Varints是一种紧凑表示数字的办法。他用一个或者多个字节表示一个数字,值越小的数字节节数越少。相对与传统的用4字节表示int32类型的数字,Varints对于小于128的数值都可以用一个字节表示,大于128的数值会用更多的字节来表…...
OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。
学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数。 1、画线条——line()函数 介绍: cv2.line(image, start_point, end_point, color, thickness)参数: image: 图像start_point:…...
性能平台数据提速之路
作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践,如何高性价比满足大数据生产端提速?如何…...
Dns域名解析服务器
前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址? 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议,用来获取域名对应的IP地址 域名解析服务器的介绍 DNS(Dom…...
关于 JavaScript 中的 Promises
在 JavaScript 中,Promise 是一个对象,它表示一个可能还不可用,但会在未来解决的值。Promises 用于处理异步操作,例如发出网络请求或访问数据库,其中结果不是立即可用的。如果你准备好了,我想开始我们的冒险…...
PMP考前冲刺题——错题集
3、 [多选] 采购部门需要向全球不同的供应商采购项目所需的各种商品,所有采购订单均己发送给供应商并已按要求处理。项目经理后来收到客户提出的变更请求。由于项目经理未及时通知采购部门,运抵的所有物品都是按原来的需求所提供。 项目经理本应做什么来…...
开源AI工具链ClawForge:从本地模型部署到Agent开发的平民化实践
1. 项目概述:从“ClawForge”看开源AI工具链的平民化实践 最近在GitHub上看到一个挺有意思的项目,叫“ClawForge”。光看名字,你可能会联想到“锻造爪子”,有点神秘又带点力量感。实际上,这是一个围绕开源大语言模型&a…...
SteamAutoCrack终极指南:如何快速实现游戏免Steam启动的完整教程
SteamAutoCrack终极指南:如何快速实现游戏免Steam启动的完整教程 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack是一款强大的开源工具,专门用于…...
手把手教你用Matlab R2018a为TI C2000 DSP安装Embedded Coder支持包(含账户与版本避坑)
从零搭建Matlab与TI C2000 DSP的嵌入式开发环境:避坑指南与实战解析 当Matlab R2018a遇上TI C2000系列DSP处理器,工程师们便获得了一个从算法设计到硬件部署的完整解决方案。不同于传统的CCS开发模式,这种基于模型的设计(Model-Ba…...
LinkedOM与JSDOM性能对比:10倍速度提升的秘诀
LinkedOM与JSDOM性能对比:10倍速度提升的秘诀 【免费下载链接】linkedom A triple-linked lists based DOM implementation. 项目地址: https://gitcode.com/gh_mirrors/li/linkedom 在现代Web开发中,DOM解析和操作性能直接影响应用响应速度。Lin…...
5分钟搞定!iperf3 Windows版:专业网络性能测试工具完全指南
5分钟搞定!iperf3 Windows版:专业网络性能测试工具完全指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 你是否曾经怀疑过…...
Taotoken为Claude Code用户提供稳定替代方案解决封号与Token不足痛点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken为Claude Code用户提供稳定替代方案解决封号与Token不足痛点 1. 场景与需求 许多使用Claude Code进行开发的工程师会遇到…...
5G双连接(EN-DC):开启5G网络融合新体验
5G双连接(EN-DC):开启5G网络融合新体验 在5G网络快速发展的进程中,5G双连接(EN-DC)技术逐渐成为行业内关注的焦点。它作为5G网络架构中的一项关键技术,为提升网络性能、优化用户体验发挥着重要作…...
5G与4G LTE互操作:无缝衔接,共筑通信新生态
5G与4G LTE互操作:无缝衔接,共筑通信新生态 在移动通信技术日新月异的今天,5G作为新一代通信技术,正逐步融入我们的生活,与4G LTE形成互补共存的局面。5G与4G LTE之间的互操作,不仅关乎用户体验的连续性&am…...
TAMI-MPC框架:优化边缘计算中的隐私保护机器学习
1. TAMI-MPC框架设计背景与核心挑战 在边缘计算和物联网设备快速发展的今天,隐私保护机器学习(Privacy-Preserving Machine Learning, PPML)的需求日益凸显。安全多方计算(Secure Multi-Party Computation, MPC)作为PP…...
GetQzonehistory:3分钟永久备份你的QQ空间青春回忆,告别数据丢失焦虑
GetQzonehistory:3分钟永久备份你的QQ空间青春回忆,告别数据丢失焦虑 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经担心过QQ空间里那些珍贵的青春回…...
