当前位置: 首页 > news >正文

【开端】通过Java 过滤器灵活配置URL访问权限,并返回403

一、绪论

在JAVA项目系统中,后端给前端提供接口。但是在某些场景我们需要临时控制接口是否能被访问。或关闭某一接口的访问权限。

比如某一接口被攻击了或者某一接口存在漏洞,在系统不关闭的情况下,如何控制系统的访问权限。

二、控制接口访问权限的方案

这里介绍通过过滤器的方式,

1、首先所有的接口URL都应该可配置

     //禁止访问的url
        if (pathMatcher(forbiddenUrl, path)) {
            return forbidden(response);
        }

	//禁止访问的urlif (pathMatcher(forbiddenUrl, path)) {return forbidden(response);}

path  获取到请求的URL

forbiddenUrl 被禁止访问的URL列表。这里可以是多个或者一个。

    String path = request.getURI().getPath(); 获取前端请求的URL 

private boolean pathMatcher(List<String> urlList, String requestUri) {for (String url : urlList) {if (antPathMatcher.match(url, requestUri)) {return true;}}return false;}

 

2、将禁止访问信息返回到前端

	/*** 无权限* * @param response* @return*/private Mono<Void> forbidden(ServerHttpResponse response) {log.info("========暂无权限访问========");String responseDataStr = JSON.toJSON(ResponseData.error(HttpStatus.FORBIDDEN.value(), "forbidden to acc 接口已关闭或无权访问")).toString();byte[] bytes = responseDataStr.getBytes(StandardCharsets.UTF_8);DataBuffer buffer = response.bufferFactory().wrap(bytes);response.setStatusCode(HttpStatus.FORBIDDEN);return response.writeWith(Mono.just(buffer));}

其中配置的URL列表方式可以通过数据库表或者apollo配置等配置注入

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 浅谈基础的图算法——Tarjan求强联通分量算法(c++)
  • 本地Linux服务器创建我的世界MC私服并实现与好友异地远程联机游戏
  • java学习笔记 VSCode
  • Promethues Metrics
  • 深度学习助力自动驾驶:YOLO目标检测系统的实现与优化
  • 大数据mapper书写范式hdfs
  • 【中级软件设计师】加密技术、数字签名、数字证书 (附软考真题)
  • 大数据系列之:CentOS7安装Python3详细步骤
  • PicGo + gitee 免费搭建个人图床
  • Typora mac版本激活
  • Python | Leetcode Python题解之第327题区间和的个数
  • 深入理解 AWS CodePipeline
  • leetcode169:多数元素
  • 使用 宝塔面板 部署 php网站
  • 操作系统|day4.Linux、Linux内核、Linux负载、Linux文件存储
  • 「面试题」如何实现一个圣杯布局?
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2018一半小结一波
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Java 网络编程(2):UDP 的使用
  • java8 Stream Pipelines 浅析
  • Js基础知识(四) - js运行原理与机制
  • nfs客户端进程变D,延伸linux的lock
  • PAT A1017 优先队列
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SQLServer插入数据
  • 栈实现走出迷宫(C++)
  • 正则与JS中的正则
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C语言)fgets与fputs函数详解
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (四)Android布局类型(线性布局LinearLayout)
  • (转) Face-Resources
  • (转)程序员疫苗:代码注入
  • .Net 8.0 新的变化
  • .NET MVC之AOP
  • .NET Reactor简单使用教程
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET项目中存在多个web.config文件时的加载顺序
  • .Net语言中的StringBuilder:入门到精通
  • .Net中ListT 泛型转成DataTable、DataSet
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [14]内置对象
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告