knife4j生产环境禁止打开页面

        Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案,官网地址:Knife4j · 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j

考虑到安全性问题,在实际服务部署到生产环境后就需要禁用到swagger页面的展示,这个时候只需要进行如下配置即可实现该功能:

knife4j:production: true

 是的,通过设置knife4j.production为true就意味着在生产环境下,这个时候就无法打开swagger对应页面,当你输入http://localhost:8081/doc.html页面会返回如下错误信息:

 下面简单看下knife4j是如何实现该功能的,找到Knife4jAutoConfiguration这个类,看如下的Bean创建即可

    // knife4j.productio为true时创建ProductionSecurityFilter对象@Bean@ConditionalOnMissingBean(ProductionSecurityFilter.class)@ConditionalOnProperty(name = "knife4j.production", havingValue = "true")public ProductionSecurityFilter productionSecurityFilter(Knife4jProperties knife4jProperties) {boolean prod = false;ProductionSecurityFilter p = null;if (knife4jProperties == null) {if (environment != null) {String prodStr = environment.getProperty("knife4j.production");if (logger.isDebugEnabled()) {logger.debug("swagger.production:{}", prodStr);}prod = Boolean.valueOf(prodStr);}p = new ProductionSecurityFilter(prod);} else {p = new ProductionSecurityFilter(knife4jProperties.isProduction());}return p;}
ProductionSecurityFilter类如其名,该类是一个Filter实现类,所以看下这个类的doFilter方法实现
    @Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) request;if (production) {String uri = httpServletRequest.getRequestURI();// 判断uri是否是要被拦截的地址,被拦截地址有如下几个:// /*public BasicFilter() {urlFilters = new ArrayList<>();urlFilters.add(Pattern.compile(".*?/doc\\.html.*", Pattern.CASE_INSENSITIVE));urlFilters.add(Pattern.compile(".*?/v2/api-docs.*", Pattern.CASE_INSENSITIVE));urlFilters.add(Pattern.compile(".*?/v2/api-docs-ext.*", Pattern.CASE_INSENSITIVE));urlFilters.add(Pattern.compile(".*?/swagger-resources.*", Pattern.CASE_INSENSITIVE));urlFilters.add(Pattern.compile(".*?/swagger-resources/configuration/ui.*", Pattern.CASE_INSENSITIVE));urlFilters.add(Pattern.compile(".*?/swagger-resources/configuration/security.*", Pattern.CASE_INSENSITIVE));// https://gitee.com/xiaoym/knife4j/issues/I6H8BEurlFilters.add(Pattern.compile(".*?/swagger-ui.*", Pattern.CASE_INSENSITIVE));urlFilters.add(Pattern.compile(".*?/v3/api-docs.*", Pattern.CASE_INSENSITIVE));}*/if (!match(uri)) {chain.doFilter(request, response);} else {response.setContentType("text/palin;charset=UTF-8");PrintWriter pw = response.getWriter();// 下面信息就是页面展示的无权访问信息pw.write("You do not have permission to access this page");pw.flush();}} else {chain.doFilter(request, response);}}

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

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

相关文章

Spring使用RestTemplate返回的嵌套实体对象为空,转换json报错

项目场景&#xff1a; Spring Boot项目使用RestTemplate调用接口&#xff0c;使用嵌套实体对象接收的返回结果 实体对象TokenUser&#xff0c;其中TokenUserInfo是嵌套的对象&#xff1a; Data public class TokenUser {private Integer code;private TokenUserInfo data;pr…

类和对象(1)(至尊详解版)

相信对于大家而言&#xff0c;对于类和对象都会是一头雾水吧&#xff01;什么是类&#xff1f;或者你有对象吗&#xff1f;那么本期的内容呢&#xff1f;就由我来为大家再次增加对于它们的理解&#xff0c;由于水平上的原因&#xff0c;可能会存在不当之处&#xff0c;敬请读者…

C#双向链表:只用泛型节点类ListNode<T>设计的最短小的双向链表包含初始化链表数据和遍历链表各节点

目录 一、涉及到的知识点&#xff1a; 1.ListNode 类使用自动属性设计 2. 泛型节点类设计的误区 二、仅仅定义泛型节点类&#xff0c;实现最短的双向链表 一、涉及到的知识点&#xff1a; 1.ListNode 类使用自动属性设计 public class ListNode {public object Object { …

类与对象(三)--static成员、友元

文章目录 1.static成员1.1概念&#x1f3a7;面试题✒️1.2static的特性&#x1f3a7;1.3思考&#x1f3a7; 2.友元2.1什么是友元&#xff1f;&#x1f3a7;2.2两种友元关系&#xff1a;&#x1f3a7; 1.static成员 1.1概念&#x1f3a7; &#x1f50e; static关键字用于声明类…

Jmeter性能测试 -1

之前讲的Jmeter算不上是性能测试&#xff0c;只是用Jmeter做接口测试。现在我们开始进入实际的性能测试。开始前你应该对Jmeter有了一定的了解&#xff0c;把前面Jmeter内容看一遍应该可以入门了。 Jmeter与locust locust除了可以做接口的性能测试以外&#xff0c;做性能测试…

MongoDB和Mysql区别与各自优缺点

最近使用数据库来做大模型Chat记录和后续的数据处理&#xff0c;对比mysql和mongodb&#xff0c;整理如下&#xff1a; 数据库mysqlmongoDB介绍- MySQL 是一款安全、跨平台、高效的&#xff0c;并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 My…

ubuntu18.04编译OpenCV-3.4.19+OpenCV_contrib-3.4.19

首先确保安装了cmake工具 安装opencv依赖文件 sudo apt-get install build-essential sudo apt-get install git libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev li…

树莓派(Raspberry Pi)常见的各种引脚介绍

本文将为您详细讲解树莓派&#xff08;Raspberry Pi&#xff09;常见的各种引脚&#xff0c;以及它们的特点、区别和优势。树莓派是一款非常受欢迎的单板计算机&#xff0c;它拥有多个 GPIO&#xff08;通用输入输出&#xff09;引脚&#xff0c;这些引脚可以用于各种电子项目和…

Java中的基本数据类型有哪些

在Java编程语言中&#xff0c;基本数据类型&#xff08;Primitive Types&#xff09;是预定义的数据类型&#xff0c;它们不是由用户定义的类创建的&#xff0c;而是由语言本身提供的。这些基本数据类型是构成Java程序的基础&#xff0c;用于存储不同类型的值&#xff0c;如整数…

【C++】C++模板基础知识篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…

LeetCode刷题--- 单词拆分

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动态规划算法…

金智维售前总监屈文浩,将出席“ISIG-RPA超级自动化产业发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;RPA中国、AIGC开放社区、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索R…

mysql笔记:5. 运算符

文章目录 算术运算符比较运算符等于运算符安全等于运算符NULL值判断LIKE运算符 逻辑运算符位运算符运算符的优先级 在MySQL中&#xff0c;运算符是指在执行特定算术或逻辑操作时用到的符号。常用的运算符有算术运算符、比较运算符、逻辑运算符、位运算符等。 算术运算符 算术运…

配置类 + @Bean定义第三方组件

1. 问题描述 我们可以通过注解Component、Controller、Service、Repository将自己的创建的类添加到IOC容器中&#xff0c;交由IOC管理。但第三方jar包的类&#xff0c;无法使用Component等相关注解添加到IOC容器中&#xff0c;因为源码jar包内容为只读模式&#xff0c;我们不可…

问题:前端获取long型数值精度丢失,后面几位都为0

文章目录 问题分析解决 问题 通过接口获取到的数据和 Postman 获取到的数据不一样&#xff0c;仔细看 data 的第17位之后 分析 该字段类型是long类型问题&#xff1a;前端接收到数据后&#xff0c;发现精度丢失&#xff0c;当返回的结果超过17位的时候&#xff0c;后面的全…

磁性材料的基本特性

1. 磁性材料的磁化曲线 磁性材料是由铁磁性物质或亚铁磁性物质组成的&#xff0c;在外加磁场H 作用下&#xff0c;必有相应的磁化强度M 或磁感应强度B&#xff0c;它们随磁场强度H 的变化曲线称为磁化曲线&#xff08;M&#xff5e;H或B&#xff5e;H曲线&#xff09;。磁化曲…

通知:T3学员领取资料391-395

各位T3学员∶本周VBA技术资料增加391-395讲&#xff0c;看到通知后联络我&#xff08;微&#xff1a;VBA6337&#xff09;免费领取资料。成果来之不易&#xff0c;您更新后请说声谢谢&#xff0c;感恩我的成果。 MF391&#xff1a;选择同颜色的单元格 MF392&#xff1a;连接范…

图文并茂的讲清楚Linux零拷贝技术

今天我们来聊一聊Linux零拷贝技术&#xff0c;今天我们以一个比较有代表性的技术sendfile系统调用为切入点&#xff0c;详细介绍一下零拷贝技术的原理。 1.零拷贝技术简介 Linux零拷贝技术是一种优化数据传输的技术&#xff0c;它可以减少数据在内核态和用户态之间的拷贝次数&…

Ubuntu 22.04 server 安装GNOME/XFCE/KDE桌面环境

在Ubuntu Server上安装桌面环境可以通过以下步骤完成&#xff1a; 安装前请确保您已经在/etc/apt/sources.list 文件中启用了Universe和Multiverse软件库。 首先&#xff0c;通过SSH或物理访问方式登录到Ubuntu Server。 确保系统处于最新状态&#xff0c;运行以下命令进行更…

图论入门题题解

✨欢迎来到脑子不好的小菜鸟的文章✨ &#x1f388;创作不易&#xff0c;麻烦点点赞哦&#x1f388; 所属专栏&#xff1a;刷题_脑子不好的小菜鸟的博客-CSDN博客 我的主页&#xff1a;脑子不好的小菜鸟 文章特点&#xff1a;关键点和步骤讲解放在 代码相应位置 拓扑排序 / 家谱…