如何评价公司项目接口性能和拦截攻击的能力

为什么要做接口测试?我们做性能测试的目的是什么?我觉得应该从以下几点去考虑:

1、寻找软件系统可能存在的性能问题,定位性能瓶颈并解决问题。
2、判定软件系统的性能表现,预见系统负载压力承受力,在应用部署之前,评估系统性能。

一、性能测试需要关注的指标有哪些?这边其实可以大体分为两大块:系统指标、资源指标:
在这里插入图片描述
能测试监控关键指标说明:

1、资源指标

CPU使用率:指用户进程与系统进程消耗的CPU时间百分比,长时间情况下,一般可接受上限不超过85%。

内存利用率:内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存使用率可接受上限为85%。

磁盘I/O: 磁盘主要用于存取数据,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据的时候对应的是写IO操作,取数据的时候对应的是是读IO操作,一般使用% Disk Time(磁盘用于读写操作所占用的时间百分比)度量磁盘读写性能。

网络带宽:一般使用计数器Bytes Total/sec来度量,Bytes Total/sec表示为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。

2、系统指标:

并发用户数:某一物理时刻同时向系统提交请求的用户数。

在线用户数:某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求。

平均响应时间:系统处理事务的响应时间的平均值。事务的响应时间是从客户端提交访问请求到客户端接收到服务器响应所消耗的时间。对于系统快速响应类页面,一般响应时间为3秒左右。

事务成功率:性能测试中,定义事务用于度量一个或者多个业务流程的性能指标,如用户登录、保存订单、提交订单操作均可定义为事务

二、如何分析监控的关键指标?

1、资源指标分析

判断CPU是否是瓶颈的方法:
一般情况下CPU满负荷工作,有时候并不能判定为CPU出现瓶颈,比如Linux 总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化,即CPU尽可能最大化使用。因此,一般判断CPU为瓶颈,主要从两方面:一是CPU空闲持续为 0,二是运行队列大于CPU核数(经验值3-4倍),即可判定存在瓶颈,对于CPU高消耗主要由什么引起的,可能是应用程序不合理造成,也可能是硬件资源 不足,需要具体问题具体分析,比如问题SQL语句引起,则需要跟踪并优化引起CPU使用过高的SQL语句。

判断内存是否是瓶颈的方法:
一般至少有10%可用内存,内存使用率可接受上限为85%。当空闲内存变小时,系统开始频繁地调动磁盘页面文件,空闲内存过小可能是内存不足或内存泄漏引起,需要根据系统实际情况监控分析。

判断磁盘I/O是否是瓶颈的方法:
磁盘I/O对于数据库服务器、文件服务器、流媒体服务器系统来说,更容易成为瓶颈,一般从以下几个方面对磁盘I/O进行分析判断:

① 计算每磁盘I/O数
每磁盘I/O数可用来与磁盘的I/O能力进行对比,如果经过计算得到的每磁盘I/O数超过了磁盘标称的I/O能力,则说明确实存在磁盘的性能瓶颈
② 监控磁盘读写,如果磁盘长时间进行大数据量读写操作,且cpu等待超过20%,则说明磁盘I/O存在问题,考虑提高磁盘I/O读写性能。

**判断网络带宽是否是瓶颈的方法:**判断网络带宽是否是系统运行性能瓶颈的首要条件是网络带宽是否会影响系统交易执行性能。例如:减小网络带宽,并发用户数、响应时间与事务通过率等性能指标是否不能接受;或者增加网络带宽,并发用户数、响应时间与事务通过率等性能指标会得到明显提高。

在实际性能测试中,如果发现始终报连接超时,而实际手工访问可以正常访问,可以通过ping应用服务器IP或网关IP,如果出现网络严重延迟或丢包,则说明网络不稳定,需要检查网络。

通过对资源指标四个指标的分析,实际上各个方面都是互相依赖的,不能孤立的单从某个方面进行排查。当一个方面出现性能问题时,往往会引发其他方面的 性能问题,例如,大量的磁盘读写势必消耗CPU和IO资源,而内存的不足会导致频繁地进行内存页写入磁盘、磁盘写到内存的操作,造成磁盘IO瓶颈,同时, 大量的网络流量也会造成CPU过载,所以,在分析性能问题时,需要从各个方面进行考虑。

2、系统指标分析

**并发用户数:**系统能够支持的用户数是系统容量的重要标志,并发用户数用于度量系统在高并发量访问下,系统的并行处理能力,一般如果系统中存在死锁、资源争用,在并发访问下,由于请求处于队列等待中,系统响应就会随着时间变慢。

一般情况下,选用高吞吐量、高数据库I/O、高商业风险的业务功能进行并发用户访问测试。

判断系统能够承受的最大并发用户数,通常以满足以下条件为准:

1、业务功能操作平均响应时间在合理范围之内

2、事务成功率在合理范围之内

3、 系统运行无故障(无异常宕机)

4、系统资源指标使用在合理范围内

**平均响应时间:**对于客户端用户来说,最直观的体验就是访问该页面快或者慢,即响应时 间的长短。比如在持续并发性能测试过程中,客户感知访问应用很慢,监控到的平均响应时间也逐渐变长,这时就需要先借助于监控到的资源指标,首先排除资源方 面的限制因素,再从应用本身进行定位,如可以采用页面细分工具(如httpwatch、Loadrunner Anaysis中的页面组件细分)分析响应比较慢的页面。

**事务成功率、超时出错率:**事务成功率越高,则表明系统处理能力越大;而失败事务主要由于系统响应慢,导致访问业务功能超时,或者系统业务功能异常,不能正常访问等,需要根据事务错误提示信息,具体分析。

我们运用性能测试工具实战操作一下,看下公司项目的防攻击及性能怎么样,具体的代码如下页面:
在这里插入图片描述
我们请求之后看看结果图:
在这里插入图片描述
从图我们可以看出,并发刚开始时16:19之前都还算正常,运行比较平稳,16:19之后请求数和相应时长突然变大,我们用接口工具请求看看:
在这里插入图片描述
原来是我们系统的拦截工具把攻击拦截了,说明我们的拦截做得不错。至于性能怎么样我们还要具体分析。待续。。。。

<think> 嗯,用户这次聚焦在"学成在线"这个具体项目的过滤器拦截应用场景上,看来是希望结合实践案例理解理论。之前讨论的底层实现差异(函数回调 vs 动态代理)需要转化为实际开发中的设计决策依据。 从用户引用的资料看,ta已经掌握基础概念:过滤器侧重请求准入(门卫),拦截器侧重过程干预(管家)。但"学成在线"作为教育平台,其业务特性会深刻影响技术选型——比如高并发选课场景需要过滤器快速拦截非法请求,而权限校验更适合用拦截器接入Spring安全体系。 具体到项目模块: - 过滤器处理全局性、低耦合需求:全站字符编码统一用CharacterEncodingFilter(避免每个controller处理乱码),XSS攻击防护用自定义过滤器清洗参数。这些操作不需要Spring上下文支持,且必须在请求到达业务逻辑前完成。 - 拦截器处理业务关联操作:用登录验证拦截器实现"未登录跳转登录页"而非单纯拒绝(需依赖UserService);审计日志拦截器记录操作时间+用户ID(需获取Spring管理的审计组件实例)。这些都需要访问IOC容器的资源。 用户可能隐含的疑问是:为什么权限校验同时用了过滤器拦截器?这其实体现了分层设计思想——过滤器做粗粒度IP黑名单(性能敏感),拦截器做细粒度RBAC权限控制(业务敏感)。例如付费课程访问校验:过滤器先阻挡明显爬虫请求(节省服务器资源),拦截器再判断用户是否购买该课程(需查询数据库)。 值得补充的是异常处理差异:过滤器抛出异常会跳转到error-page(全局),而拦截器可用@ControllerAdvice捕获并返回JSON错误(适配前后端分离架构)。这在学成在线的API模块特别重要——课程查询接口需要返回{"code":403}而非白页。 最后注意项目中的执行顺序:网关层过滤器 → Web容器过滤器 → Spring拦截器。这个链条在学成在线网关统一添加JWT令牌时尤为关键,若顺序错乱会导致拦截器获取不到用户信息。 </think>在学成在线项目中,过滤器拦截器的应用场景根据其技术特性进行划分,主要差异体现在**处理层级****功能边界**上。以下是具体应用分析: --- ### **一、过滤器(Filter)的应用场景** 基于Servlet规范,作用于Web容器层(如Tomcat),执行顺序最早。 1. **全局字符编码** - **场景**:统一处理HTTP请求/响应的字符集(如UTF-8) - **实现**:通过`CharacterEncodingFilter`配置,避免中文乱码 - **优势**:在请求进入业务逻辑前完成编码转换 [^1] 2. **XSS攻击防护** - **场景**:过滤用户输入的恶意脚本(如`<script>`) - **实现**:自定义过滤器对请求参数进行HTML标签转义 - **代码片段**: ```java public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { HttpServletRequest wrappedRequest = new XssRequestWrapper((HttpServletRequest) request); chain.doFilter(wrappedRequest, response); // 传递包装后的请求 } ``` 3. **敏感词过滤** - **场景**:动态屏蔽用户发布的违规内容 - **实现**:读取请求参数并敏感词库匹配,替换为`***` 4. **请求日志记录** - **场景**:记录所有请求的IP、URL、耗时等基础信息 - **限制**:无法获取Spring管理的Bean(如业务Service)[^2] --- ### **二、拦截器(Interceptor)的应用场景** 基于Spring框架,作用于Controller层,可接入Spring上下文。 1. **登录状态校验** - **场景**:验证用户Token有效性,拦截未登录请求 - **实现**:从请求头获取Token,调用`UserService`查询Redis缓存 - **优势**:可直接注入Spring Bean(如`UserService`)[^2] 2. **接口权限控制** - **场景**:校验用户角色(如学生/教师)能否访问当前API - **实现**:通过`@PreAuthorize`注解或自定义拦截器鉴权 - **示例**:教师端管理接口仅允许`ROLE_TEACHER`访问 3. **接口耗时监控** - **场景**:记录Controller方法的执行时间 - **代码片段**: ```java public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { request.setAttribute("startTime", System.currentTimeMillis()); return true; } public void afterCompletion(...) { long cost = System.currentTimeMillis() - (Long)request.getAttribute("startTime"); log.info("接口 {} 耗时: {}ms", request.getRequestURI(), cost); } ``` 4. **数据脱敏处理** - **场景**:在返回响应前对敏感字段(如手机号、身份证)脱敏 - **实现**:在`postHandle`中修改响应体的数据格式 --- ### **三、核心差异总结** | **能力** | 过滤器(Filter) | 拦截器(Interceptor) | |------------------------|--------------------------|----------------------------| | **作用层级** | Web容器层 | Spring MVC层 | | **Spring依赖注入** | ❌ 不可用 | ✅ 可用 | | **请求干预点** | 仅`request/response` | 可访问Handler方法、参数等 | | **性能影响** | 更轻量(接近底层) | 略重(依赖Spring上下文) | --- ### **四、学成在线中的典型执行流程** ```mermaid graph LR A[HTTP请求] --> B[字符编码过滤器] B --> C[XSS防护过滤器] C --> D[登录拦截器] D --> E[权限校验拦截器] E --> F[Controller方法] F --> G[数据脱敏拦截器] G --> H[响应日志过滤器] ``` > **设计建议**: > - 安全防护(XSS、IP黑名单)用**过滤器**(更早拦截) > - 业务校验(登录、权限)用**拦截器**(依赖Spring Bean)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值