预防高频访问 (在x秒内访问达到一定的次数转跳到防刷页面)

TMS320F28P55x调试实战:仿真器连接、程序跑飞与Flash烧录高频问题解析 在嵌入式MCU开发中,TMS320F28P55x作为C2000系列的高性能芯片,集成CLA与FPU,调试复杂度远高于普通单片机。工程师常遇到的启动流程配置、JTAG时序、复位死循环、Flash烧录失败及ADC采样异常等问题,往往源于对芯片底层机制的理解不足。本文从仿真器连接失败的诱因出发,系统梳理串口日志重定向、看门狗喂狗策略、堆栈溢出定位、RAM与Flash模式选择等关键技术点,并结合CCS调试工具与逻辑分析仪的使用技巧,提供一套贴近工程实践的排查链路。掌握这些方法,能有效缩短C2000系列项目的调试周期 阅读详情


背景:预防高频访问 (在10秒内访问达到一定的次数转跳到防刷页面),10秒内访问超过1w次存入内存。项目用的strus2+memcache,java代码和配置如下


package com.woyaou.base.interceptor;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.woyaou.base.util.CommonCache;
import com.woyaou.base.util.ConfigReaderUtils;
import com.woyaou.base.util.DateUtil;
import com.woyaou.base.util.IpUtils;
import com.woyaou.base.util.LogUtils;

/**
 * 异常拦截器
 *@Description: 预防高频访问 (在10秒内访问达到一定的次数转跳到防刷页面) 
 *@author Wupeng 
 *@date 2013-09-11 
 *
 */
@SuppressWarnings("serial")
public class ChallengeCollapsarInterceptor extends AbstractInterceptor {
	//对于高频访问者的阻塞时间
	private static int BLOCK_CACHE_TIME = 60;
	//对于访问计数缓存时间
	private static int COUNT_CACHE_TIME = 10;
	//10秒内访问访问限制次数
	private static int BLACK_TIME_LIMIT = 1000000;
	
	@Autowired
	private CommonCache commonCache;
	
	public String intercept(ActionInvocation invocation) throws Exception {
		final HttpServletRequest request = ServletActionContext.getRequest();
		String clientIp =IpUtils.getIpAddr(request);
		String blackKey = "black-"+clientIp;
		//检查用户是否在阻塞队列中。
		String value = (String)commonCache.get(blackKey); 
		if(value != null){
			return "blackpage";
		}

		String requestURI = request.getRequestURI();
		String strTime = DateUtil.getTimeLong().substring(0,9); //10秒时间, 9位是10秒级。
		String countKey = "count-"+strTime+"-"+clientIp+"-"+requestURI;
		int iTimes = 0;
		//取出10内的访问次数。
		value = (String)commonCache.get(countKey);
		if(value != null){
			iTimes = Integer.valueOf(value)+1;
			if(iTimes > BLACK_TIME_LIMIT){ //10秒内访问次数大于限定次数
				commonCache.add(blackKey, BLOCK_CACHE_TIME, "1");//加入阻塞缓存
				LogUtils.info("blacked:"+blackKey);
			}
		}
		//加入计数队列
		commonCache.set(countKey, COUNT_CACHE_TIME, String.valueOf(iTimes));

		return invocation.invoke();
	}
	
	public void init(){
		LogUtils.info("ChallengeCollapsarInterceptor:init()");
		String limits = ConfigReaderUtils.getValue("black_refresh_limit");
		if(limits != null){
			BLACK_TIME_LIMIT = Integer.valueOf(limits).intValue();
		}
	}
	
	public void destroy(){
		LogUtils.info("ChallengeCollapsarInterceptor:destroy()");
	}
}

struts.xml配置


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- action可访问 -->
	<constant name="struts.action.extension" value="action"/>
	<constant name="struts.devmode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
	<!-- 公共配置 -->
 	<include file="struts-common.xml"></include>
 	<!-- 项目功能 -->
 	<include file="com/woyaou/base/action/struts-ajaxcommon.xml"></include>
 	<!-- 火车票-车站 -->
 	<include file="com/woyaou/train/action/station/struts-station.xml"></include>
 	<!-- 火车票-时刻 -->
 	<include file="com/woyaou/train/action/shike/struts-shike.xml"></include> 	
 	<!-- 火车票-预售期 -->
 	<include file="com/woyaou/train/action/presale/struts-presale.xml"></include>
</struts>

struts-common.xml 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
	"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="common" namespace="/" extends="struts-default">
		<interceptors>
			<!--定义一个异常拦截器-->
			<interceptor name="exception" class="com.woyaou.base.interceptor.ExceptionInterceptor" />
			<interceptor name="challengeCollapsar" class="com.woyaou.base.interceptor.ChallengeCollapsarInterceptor" />
			
			<!--定义一个包含权限检查的拦截器栈-->
			<interceptor-stack name="mydefault">
				<!--配置内建默认拦截器-->
				<interceptor-ref name="defaultStack" />
				<!--配置自定义的拦截器-->
				 <interceptor-ref name="exception" />
				 <interceptor-ref name="challengeCollapsar" /> 
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="mydefault" />
		<default-action-ref name="dispatcheer" /> 
		<!--定义全局Result-->
		<global-results>
			<result name="404">/404.html</result>
			<result name="error">/otherError.html</result>
			<result name="login" type="redirect">/index.jsp</result>
			<result name="blackpage" type="redirect">/refreshBlack.html</result>
		</global-results>
		<action name="dispatcheer">
			<result>/404.html</result>
		</action>
		<!-- train search -->
		<action name="search" class="trainSearchAction">
			<!-- search shike by statioin -->
			<result name="shike_station" type="httpheader">
			    <param name="status">301</param>
			    <param name="headers.Location">${forwardDomain}/${fromStationPy}/</param>
			</result>
			<!-- search shike by statioin to station -->
			<result name="shike_station2station" type="httpheader">
			    <param name="status">301</param>
			    <param name="headers.Location">${forwardDomain}/${fromStationPy}-${toStationPy}.html</param>
			</result>					
		</action>
	</package>
	<package name="common_ajax" namespace="/" extends="json-default">
		<interceptors>
			<!--定义一个异常拦截器-->
			<interceptor class="com.woyaou.base.interceptor.ExceptionInterceptor" name="exception" />
			<interceptor name="challengeCollapsar" class="com.woyaou.base.interceptor.<span style="color:#ff0000;"><strong>ChallengeCollapsarInterceptor</strong></span>" />
			<!--定义一个包含权限检查的拦截器栈-->
			<interceptor-stack name="mydefault">
				<!--配置内建默认拦截器-->
				<interceptor-ref name="defaultStack" />
				<!--配置自定义的拦截器-->
				<interceptor-ref name="exception" />
				<interceptor-ref name="challengeCollapsar" />
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="mydefault" />
		<default-action-ref name="dispatcheer" />  
		<!--定义全局Result-->
		<global-results>
			<result name="404">/404.html</result>
			<result name="error">/other.html</result>
			<result name="login" type="redirect">/index.jsp</result>
			<result name="blackpage" type="redirect">/refreshBlack.html</result>
		</global-results>
		<action name="dispatcheer">
			<result>/404.html</result>
		</action>
	</package>
	
</struts>



DuckDB实战:用SQL加速数据工程Pipeline,秒级替代pandas慢查询 DuckDB是一种嵌入式列式分析数据库,专为OLAP场景设计,采用向量化执行引擎与SIMD指令加速,支持Parquet原生读取、谓词下推和JIT编译。其核心价值在于不改变业务逻辑的前提下,将pandas中耗时的多表JOIN、窗口函数和复杂聚合操作,通过标准SQL接口实现毫秒到秒级响应。相比传统行式处理,DuckDB在千万级以上数据规模下展现出显著性能优势,尤其适用于ETL中间计算、本地快速验证、云存储直连分析等轻量高并发场景。本文聚焦数据工程师真实痛点,详解如何用DuckDB替换pandas中最慢的聚合与连 阅读详情

相关推荐

C++电话面试深度解析:高频考点与实战应对策略

在软件工程领域,内存管理与面向对象编程是构建高性能、可维护系统的基石。内存管理涉及从基础的内存分配到智能指针等现代特性,其核心原理在于高效、安全地控制程序生命周期内的资源使用,避免内存泄漏与悬空指针,这对于系统稳定性至关重要。面向对象编程通过封装、继承和多态等机制,提升了代码的复用性与可扩展性,其中虚函数表(vtable)等底层实现是理解运行时多态的关键。这些技术的价值在于能够支撑起复杂软件架构,广泛应用于操作系统、游戏引擎、高频交易等对性能和可靠性要求极高的场景。本文聚焦于C++工程师在电话面试中面临的挑

weixin_30855099的博客 779

apache2.4.9 开启path_info访问_Redis应用限制之访问频率

我们知道当网站的访问量突然很大的时候肯定会对服务器造成影响,甚至无法访问,如果是正常的访问那么很好说明业务量增大可以考虑系统的扩展,但是如果是搜索引擎爬虫频繁访问或是一些恶意访问,那这时候我们就应该限制这些访问的访问次数。redis刚好可以解决这个问题Redis实现限制访问频率1.实现访问一  限制每个用户每分钟最多只能访问100个页面。实现思路:key使用有"rate.limiting:IP",...

weixin_39598568的博客 398

山东大学软件学院操作系统期末备考:核心知识点与题型解析

操作系统是计算机科学的核心课程,其中进程管理、内存管理、死锁与并发控制是理解系统运行原理的关键。进程作为资源分配的基本单位,线程作为CPU调度的基本单位,它们之间的同步与互斥通过PV操作、管程与协程等机制实现。银行家算法用于避免死锁,页面置换算法则直接影响虚拟内存的性能。在工程实践中,Linux命令与Shell脚本是操作系统实验的基础,而国产操作系统的兴起也要求学习者理解内核与系统调用。本文从这些通用概念出发,结合山东大学软件学院操作系统期末考试的题型分布,梳理了进程同步、死锁、内存分页、文件系统、磁盘调度

weixin_34262482的博客 302

Apache服务器如何限制IP访问:第一招——配置文件

web服务器经常会面临某些流氓IP段的访问,有时需要限制它们的访问以保证其他用户的正常访问流量。     最常见的方法是修改httpd.conf文件,例如:     Order deny,allow     Deny from all     Allow from 192.2.6.8 就表示根目录不允许任何人访问,只允许192.2.6.8这个指定IP访问。     但是当需

zhuojuchao的专栏 3507

嵌入式C语言面试:指针、数组与野指针高频考点全解析

指针是C语言的灵魂,也是嵌入式面试中区分候选人基本功的关键考点。理解指针变量本质是存储地址的变量、指针类型决定读写边界与步长,是构建扎实内存模型认知的第一步。数组与指针的等价与不等价关系、二维数组传参时的降维规则,则进一步考察对底层存储布局的理解。野指针作为嵌入式系统崩溃的主要根源,其未初始化、悬空指针、返回局部变量地址等三类来源必须深度掌握,并能通过哨兵法、硬件断点等手段系统排查。C++中的引用与指针的异同、函数指针与回调机制、二级指针在链表操作中的典型应用,也是高频考查方向。本文从指针基础概念出发,串联

weixin_34218579的博客 457

危化品双重预防机制数字化:Java+Shell与数据库建模实战

安全生产双重预防机制,即风险分级管控与隐患排查治理,是化工企业落实主体责任的基础。但这两条线如何用数字化系统落地?文章从Java与Shell的工程组合切入:Java负责业务规则,Shell处理部署、巡检与定时任务。内容涵盖LEC风险矩阵的三张表设计、隐患工单五态状态机、风险等级与复评周期的事务一致性,以及Shell初始化脚本、cron提醒脚本的编写要点。同时总结了风险等级被手工改低、隐患假闭环、脚本CRLF等高频坑。适合正在建设或改造危化品双重预防机制系统的后端与运维工程师参考。

weixin_33762130的博客 419

Apache 2 频率限制模块

做IP的访问限制,对资源性网页进行频率限制 ,首先看了很多网页都说mod_limit就是找不到这个插件的官网。 后来找到https://github.com/matsumoto-r/mod_vlimit,一个日本人写的 按这个github的描述,先安装并加载这个模块,我的测试环境是Ubuntu 12.04,先安装apxs2用来安装apache的module sudo apt-ge...

weixin_34292924的博客 804

Apache限制IP并发数和流量控制的方法

本文章来给各位同学总结一下APACHE中限制IP连接数与IP并发数和流量控制实现方法,如果只限制连接数据我们可以直接使用limit,如果要限制其它的需要使用其它第三方模块了 使用mod_limitipconn模块限制IP并发连接数 安装: wget http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2 tar jxvf mod_limitipconn-0.24.tar.bz2 cd mod_limitipconn-0.24 /usr/local/apache2/bin/apxs -c -i mod_limitipconn.c 编

apache限制并发数,IP,带宽设置

apache限制并发数,IP,带宽设置 限制并发数下载模块: 到官方网址: http://www.nowhere-land.org/programs/mod_vh

技术资料库 4440

深入解析SVPWM七段式与五段式调制的电压波形差异及优化策略

本文深入解析了SVPWM七段式与五段式调制在相电压和线电压波形上的核心差异。七段式波形对称、谐波含量低,适合追求静音与性能的场景;五段式开关次数少、损耗低,适用于对效率与散热要求高的应用。文章提供了基于谐波与损耗权衡的优化策略与选型指南。

weixin_29216957的博客 440

Unity AR涂涂乐实战:用户上传图片秒变3D模型新皮肤(附完整代码)

本文详细介绍了如何在Unity AR应用中实现用户上传图片动态生成3D模型皮肤的功能,重点讲解了动态创建材质球的技术方案和性能优化策略。通过完整的代码示例,开发者可以学习到多源图片处理、移动端内存管理以及AR场景适配等核心技巧,快速打造高性能的儿童教育类AR应用。

weixin_31509753的博客 370

Apache的Order Allow,Deny 详解

Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权。 所以,最常用的是: Order Deny,Allow Allow from All 注意“Deny,Allow”中间只有一个逗号,也只能有一个逗号,有空格都会出错...

weixin_33841503的博客 978

VGG16

VGG16学习笔记

一去不复返的通信er 1177

MedGemma X-Ray故障排查手册:端口占用/CUDA错误/进程僵死处理

本文介绍了如何在星图GPU平台上自动化部署MedGemma X-Ray 医疗图像分析系统:您的 AI 影像解读助手,实现胸部X光片的智能结构化分析。通过平台一键部署,用户可快速获取专业级影像解读报告,广泛应用于医学教育、临床辅助阅片与放射科模拟研究等场景。

weixin_42168902的博客 229

从Reset到Read:深入解析Rolling Shutter曝光流水线

本文深入解析Rolling Shutter(卷帘曝光)的工作原理,重点探讨Reset和Read信号在图像传感器中的关键作用。通过Reset-Read流水线机制,详细解释了曝光控制、时序调优及运动伪影补偿等核心技术,帮助读者理解卷帘曝光在高速摄影和动态场景中的应用。

weixin_42531925的博客 254

基于机器学习的网络安全态势感知模型研究与实现

基于机器学习的网络安全态势感知模型研究与实现 1. 背景介绍 1.1 网络安全态势感知的重要性 在当今互联网时代,网络安全已经成为一个至关重要的话题。随着网络攻击手段的不断升级和演变,传统的被动防御方式已经难以满足日益

AI大模型应用之禅 1582

Atlas OS Xbox 0x89235107 登录故障:3 种修复办法

Atlas OS 装完之后,打开 Xbox 应用想登录,弹出"出现错误,请稍后再试(0x89235107)"。多半是系统精简时,把 Xbox 依赖的某些组件删掉了。下面给你 3 条从轻到重的修复路径,看停在哪,花 5 到 30 分钟不等。 ## ① 先确认:是不是这个锅 动手之前,先做个快速自检。下面三条全中,才说明是这个问题: - 是不是只有 Xbox 登录不了,其他应用和网络都正常? -

gitblog_01106的博客 254

Python 爬虫高级实战:HTTPS 证书忽略与代理抓包配置

本文深入解析了HTTPS加密与SSL证书校验机制在爬虫开发中的核心问题及解决方案。文章首先剖析了HTTPS协议架构和证书校验流程,指出爬虫开发中常见的证书异常场景及其负面影响。随后详细介绍了Python主流请求库(requests、httpx、aiohttp)的证书忽略配置方法,包括同步/异步模式下的实现方案。针对代理环境,文章系统比较了HTTP、HTTPS、SOCKS5等代理类型的特性差异,并提供了完整的代理配置示例。特别对中间人抓包场景,阐述了Mitmproxy的工作原理和配置要点。最后提出了工程级爬虫

2503_91057718的博客 86

设计稿转可用页面:从视觉还原到行为建模的工程化实践

设计稿转代码不是简单的像素映射,而是将界面从静态视觉产物升级为可执行、可测试、可维护的生产级资产。其核心在于理解设计语言与编程语言之间的语义鸿沟,通过组件契约(Component Contract)、界面行为描述语言(IBDL)和数据树(Data Tree)等工程化机制,实现设计意图到研发流程的精准传导。这一范式转变使设计师标注成为高信息密度的协作输入,前端开发聚焦于逻辑扩展而非结构重写,测试覆盖基于可追溯的行为定义。在React+TypeScript+Vite已成为主流生产栈的今天,‘可用页面’已从理想走

rongdmmap的博客 400

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od,

KJ.JK 218

【OpenClaw】Edict 三省六部制部署与启动

文章摘要 本文聚焦Edict系统的本地部署与启动,提供三种安装方式:Docker快速体验、macOS/Linux原生安装和Windows生产仿真。核心目标是让用户能够独立完成系统启动和基础问题排查,确保看板、后端服务、同步脚本和网关正常运行。文章强调环境检查的重要性,并给出具体验收标准:浏览器能访问看板页面(http://127.0.0.1:7891)和接口返回JSON数据。同时提供一键启动/停止脚本和常见问题处理建议,帮助用户快速验证部署结果。配套系列教程涵盖部署启动、使用实战、二次开发和封装版本使用等内

Mr数据杨 2903

MedGemma X-Ray故障排查指南:端口占用、CUDA错误、PID僵死全解决

本文介绍了如何在星图GPU平台上自动化部署MedGemma X-Ray医疗图像分析系统:您的 AI 影像解读助手,快速构建稳定可靠的AI辅助诊断环境。该镜像专为胸部X光影像分析优化,可自动识别肺部结节等典型病灶,广泛应用于医学教学演示、临床科研辅助及基层影像初筛场景。

weixin_42186015的博客 270

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

死锁活锁饥饿阻塞无锁:高并发故障诊断与预防实战

并发编程中的死锁、活锁、饥饿、阻塞和无锁,本质是多线程/进程在共享资源调度中产生的确定性失效现象。其底层原理源于操作系统资源分配模型(如循环等待、占有并等待)与CPU原子指令能力的边界博弈;技术价值在于保障系统在高负载下的可用性与响应确定性;典型应用场景覆盖Java线程池卡顿、SQL Server数据库死锁、Linux系统级dbus阻塞及实时风控系统的低延迟要求;而本文聚焦于从jstack线程快照、SQL Server死锁图到CPU+日志联合分析的真实战场方法论,尤其深入解析死锁四条件验证、活锁的RUNNA

weixin_34008805的博客 230

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

如何修复 Atlas OS 的 Xbox 登录错误 0x89235107:完整自检与修复清单

装了 Atlas OS 之后,打开 Xbox 应用登录却卡在"出现错误(0x89235107)"?这通常不是网络的问题,而是系统精简时把 Xbox 依赖的某些游戏服务和组件关掉了。下面先教你用一张表 30 秒判断问题卡在哪一层,再走三条从易到难的修复路径,最后给出一劳永逸的配置建议,让你不重装系统就能恢复 Game Pass 和 Xbox 商店的登录能力。 [![Atlas OS 深色主题壁纸,

gitblog_00088的博客 569

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

AlphaFold 常见错误排查:一页速查表 + 高频报错完整修复手册

这篇 AlphaFold 常见错误排查手册覆盖启动自检、数据库与参数文件缺失、OOM 显存不足、relaxation 失败等高频报错,带你 10 分钟内走完「看到报错 → 定位 → 修复」的完整路径。 [![AlphaFold 常见错误排查手册配图:CASP14 预测结构旋转展示](https://raw.gitcode.com/GitHub_Trending/al/alphafold/raw/

gitblog_00101的博客 363

山软操作系统期末复习攻略:从PV操作到页面置换的全考点解析

操作系统是计算机系统的核心资源管理者,其核心任务在于对CPU、内存与I/O设备的协调调度。理解进程管理、内存管理等基础概念,是掌握系统运行原理的关键。在工程实践中,PV操作、页面置换算法与磁盘调度等具体技术,直接决定了系统的并发性能与资源利用效率。无论是应对课程考核还是构建真实系统,掌握这些经典机制都至关重要。围绕山东大学软件学院期末考情,系统梳理了操作系统考试的高频考点,包括进程同步与死锁避免、分页分段与虚拟内存、文件系统与磁盘调度等重点内容,并给出针对性复习策略与实战答题模板,帮助读者在有限时间内高效备

weixin_34364071的博客 334
上一篇: java.lang.reflect.InvocationTargetException异常
下一篇: java设计模式整理
_hug
博客等级 码龄17年 24粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值