媒体查询做响应式网站娱乐建网站

news/2025/9/23 19:40:49/文章来源:
媒体查询做响应式网站,娱乐建网站,怎么向搜索引擎提交网站,门户网站广告的特点有导航一、方法计时器二、valid 参数校验的通用返回三、接口访问频次拦截#xff08;幂等#xff09;一、方法计时器 注解类#xff1a;MethodTimer Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface MethodTimer { }处理器#xff08;需… 导航一、方法计时器二、valid 参数校验的通用返回三、接口访问频次拦截幂等一、方法计时器 注解类MethodTimer Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface MethodTimer { }处理器需要AOP和spring的支持MethodTimerProcessor Slf4j Component Aspect public class MethodTimerProcessor {/*** 处理 MethodTimer 注解*/Around(annotation(methodTimer))public Object timerAround(ProceedingJoinPoint point, MethodTimer methodTimer) throws Throwable {long beginMills System.currentTimeMillis();// process the methodObject result point.proceed();log.info({} 耗时 : {} ms, point.getSignature(), System.currentTimeMillis() - beginMills);return result;} }使用方法直接标记在 Controller 的方法上。 二、valid 参数校验的通用返回 注解类ValidCommonResp Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface ValidCommonResp { }处理器aopspringValidCommonRespProcessor Slf4j Aspect Component public class ValidCommonRespProcessor {/*** 处理 ValidCommonResp 注解.* 注意BindingResult是Spring validation的校验结果* 当参数传入 BindingResult后,Spring MVC就不再控制校验* 结果的返回如果不希望使用 ValidCommonResp的校验结果* 封装请在方法中实现校验结果的处理二者任选其一。** author mouhaotian*/Around(annotation(validCommonResp))public Object aroundAdvice(ProceedingJoinPoint point, ValidCommonResp validCommonResp) throws Throwable {Object[] args point.getArgs();for (Object arg : args) {if (arg instanceof BindingResult) {BindingResult bindingResult (BindingResult) arg;if (bindingResult.hasErrors()) {FieldError fieldError bindingResult.getFieldError();CommonResp commonResp new CommonResp(CommonCode.FAIL,fieldError.getField() fieldError.getDefaultMessage());return R.data(commonResp);}break;}}Object result point.proceed(args);return result;} }使用方法搭配 validation 注解、BindingResult 一起使用 PostMapping(/xxxx)ValidCommonResppublic R submit(Valid RequestBody DoorzoneInfo doorzoneInfo, BindingResult result) {log.info(请求{}, doorzoneInfo);R commonResp doorzoneInfoService.insertOrUpdDoorzoneInfo(doorzoneInfo);log.info(响应{}, commonResp);return commonResp;}好处可以替代代码块中处理 BindingResult 的逻辑。 三、接口访问频次拦截幂等 实现一个注解当controller中的方法收到请求后在一定时间之内如10s内拒绝接收相同参数的请求。即对后台接口的访问增加了频次限制可以理解为一种不是特别标准的幂等。 注解 Ide /*** 幂等校验注解类*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface Ide {/*** 关键key* key是本次请求中参数的键* 重复请求的key取自header中的rid* 用来标识这个请求的唯一性* 拦截器中会使用key从请求参数中获取value** return String*/String key() default ;/*** 自定义key的前缀用来区分业务*/String perFix();/*** 自定义key的超时时间(基于接口)*/String expireTime();/*** 禁止重复提交的模式* 默认是全部使用*/IdeTypeEnum ideTypeEnum() default IdeTypeEnum.ALL; }AOP 横切处理逻辑 /*** 注解执行器 处理重复请求 和串行指定条件的请求* p* 两种模式的拦截* 1.rid 是针对每一次请求的* 2.keyval 是针对相同参数请求* /p* p* 另根据谢新的建议对所有参数进行加密检验提供思路可以自行扩展* DigestUtils.md5Hex(userId - request.getRequestURL().toString()- JSON.toJSONString(request.getParameterMap()));* 或 DigestUtils.md5Hex(ip - request.getRequestURL().toString()- JSON.toJSONString(request.getParameterMap()));* /p*/ Slf4j Aspect Component RequiredArgsConstructor ConditionalOnClass(RedisService.class) public class IdeAspect extends BaseAspect {private final ThreadLocalString PER_FIX_KEY new ThreadLocalString();/*** 配置注解后 默认开启*/private final boolean enable true;/*** request请求头中的key*/private final static String HEADER_RID_KEY RID;/*** redis中锁的key前缀*/private static final String REDIS_KEY_PREFIX RID:;/*** 锁等待时长*/private static int LOCK_WAIT_TIME 10;private final RedisService redisService;AutowiredIdeAspectConfig ideAspectConfig;Pointcut(annotation(cn.com.bmac.wolf.core.ide.annotation.Ide))public void watchIde() {}Before(watchIde())public void doBefore(JoinPoint joinPoint) {Ide ide getAnnotation(joinPoint, Ide.class);if (enable null ! ide) {ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if (null attributes) {throw new IdeException(请求数据为空);}HttpServletRequest request attributes.getRequest();//根据配置文件中的超时时间赋值if (Func.isNotBlank(ideAspectConfig.getExpireTime())) {if(Func.isNumeric(ideAspectConfig.getExpireTime())){LOCK_WAIT_TIME Integer.parseInt(ideAspectConfig.getExpireTime());}}//根据注解传参赋值if(Func.isNotBlank(ide.expireTime())){LOCK_WAIT_TIME Integer.parseInt(ide.expireTime());}//1.判断模式if (ide.ideTypeEnum() IdeTypeEnum.ALL || ide.ideTypeEnum() IdeTypeEnum.RID) {//2.1.通过rid模式判断是否属于重复提交String rid request.getHeader(HEADER_RID_KEY);if (Func.isNotBlank(rid)) {Boolean result redisService.tryLock(REDIS_KEY_PREFIX rid, LOCK_WAIT_TIME);if (!result) {throw new IdeException(命中RID重复请求);}log.debug(msg1当前请求已成功记录,且标记为0未处理,,{}{}, HEADER_RID_KEY, rid);} else {log.warn(msg1header没有rid,防重复提交功能失效,,remoteHost{} request.getRemoteHost());}}boolean isApiExpireTime false;if (ide.ideTypeEnum() IdeTypeEnum.ALL|| ide.ideTypeEnum() IdeTypeEnum.KEY) {//2.2.通过自定义key模式判断是否属于重复提交String key ide.key();if (Func.isNotBlank(key)) {String val ;Object[] paramValues joinPoint.getArgs();String[] paramNames ((CodeSignature) joinPoint.getSignature()).getParameterNames();//获取自定义key的valueString[] keys key.split(\\|);for(int i 0; i keys.length; i){for (int j 0; j paramNames.length; j) {//BindingResult 不能转json会导致线程报错终止if (paramValues[j] instanceof BindingResult) {continue;}String params JSON.toJSONString(paramValues[j]);if (params.startsWith({)) {//如果是对象//通过key获取valueJSONObject jsonObject JSON.parseObject(params);val val jsonObject.getString(keys[i]);} else if (keys[i].equals(paramNames[j])) {//如果是单个kvval val params;} else {//如果自定义的key,在请求参数中没有此参数,说明非法请求log.warn(自定义的key,在请求参数中没有此参数,防重复提交功能失效);}}}//判断重复提交的条件String perFix ;if (Func.isNotBlank(val)) {String[] perFixs ide.perFix().split(\\|);int perFixsLength perFixs.length;for(int i 0; i perFixs.length; i){if(Func.isNotBlank(perFix)){perFix perFix : perFixs[i];}else{perFix perFixs[i];}}perFix perFix : val;Boolean result true;try {result redisService.tryLock(perFix, LOCK_WAIT_TIME);} catch (Exception e) {log.error(获取redis锁发生异常, e);throw e;}if (!result) {String targetName joinPoint.getTarget().getClass().getName();String methodName joinPoint.getSignature().getName();log.error(msg1不允许重复执行,,key{},,targetName{},,methodName{}, perFix, targetName, methodName);throw new IdeException(不允许重复提交);}//存储在当前线程PER_FIX_KEY.set(perFix);log.info(msg1当前请求已成功锁定:{}, perFix);} else {log.warn(自定义的key,在请求参数中value为空,防重复提交功能失效);}}}}}After(watchIde())public void doAfter(JoinPoint joinPoint) throws Throwable {try {Ide ide getAnnotation(joinPoint, Ide.class);if (enable null ! ide) {if (ide.ideTypeEnum() IdeTypeEnum.ALL|| ide.ideTypeEnum() IdeTypeEnum.RID) {ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request attributes.getRequest();String rid request.getHeader(HEADER_RID_KEY);if (Func.isNotBlank(rid)) {try {log.info(msg1当前请求已成功处理,,rid{}, rid);} catch (Exception e) {log.error(释放redis锁异常, e);}}PER_FIX_KEY.remove();}if (ide.ideTypeEnum() IdeTypeEnum.ALL|| ide.ideTypeEnum() IdeTypeEnum.KEY) {// 自定义keyString key ide.key();if (Func.isNotBlank(key) Func.isNotBlank(PER_FIX_KEY.get())) {try {log.info(msg1当前请求已成功释放,,key{}, PER_FIX_KEY.get());PER_FIX_KEY.set(null);PER_FIX_KEY.remove();} catch (Exception e) {log.error(释放redis锁异常, e);}}}}} catch (Exception e) {log.error(e.getMessage(), e);}} }其他相关类 Data Component ConfigurationProperties(prefix ide) public class IdeAspectConfig {/*** 过期时间 秒*/private String expireTime;}Getter AllArgsConstructor public enum IdeTypeEnum {/*** 01*/ALL(0, ALL),/*** ruid 是针对每一次请求的*/RID(1, RID),/*** keyval 是针对相同参数请求*/KEY(2, KEY);private final Integer index;private final String title; }

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

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

相关文章

国内h5网站欣赏专业制作网站哪家专业

概述 HashMap是我们常用的一种数据结构,他是一个key-value结构。我们来深入了解一下。 1.8之前用的数组加链表 1.8之后用的数组加链表加红黑树,当链表数量大于8时,将链表转为红黑树。当红黑书节点小于6又会转为链表。 浅析HashMap的put()方…

网站设计有创意的主题微信开发应用平台

随着工业AI、5G、边缘计算等前沿技术的迅速发展,未来工业正朝着大规模智能生产和柔性生产的方向稳步迈进。东土科技紧跟产业发展潮流,结合自身在工业底层控制技术、网络技术等方面的深厚积累,积极创新。 亮点带你看 鸿道操作系统&#xff0…

组织架构及营销网络网站优化培训中心

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 cs数模团队在亚太赛 APMCM前为大家提供了许多资料的内容呀&…

南磨房网站建设公司wordpress 文章

告诉你们一个震撼人心的消息,那个检测能力超强的 WAF——长亭雷池,他推出免费社区版啦,体验地址见文末。 八年前我刚从学校毕业,在腾讯做安全研究,看到宇森在 BlackHat 上演讲的议题 《永别了,SQL 注入》 …

重庆当地网站闵行专业做网站

文章目录 TDI网络过滤驱动应用1. 技术概览2. 数据包的抓取3. 应用实例3.1 TrafficShaper(限流)3.2 DnsRedirector(DNS重定向)3.3 TcpRedirector(TCP重定向) 4. 总结与参考 TDI网络过滤驱动应用 在前面的文章中,我们分析了TDI网络过滤驱动的基本开发框架以及TDI网络…

nRF54LM20A 芯片分析;

Nordic 宣布推出新一代nRF54L系列超低功耗无线系统级芯片 (SoC)的最新成员nRF54LM20A。nRF54L系列基于Nordic创新的22nm技术平台,不仅简化设计挑战,同时实现了可靠通信、更长的电池寿命和紧凑的产品设计。1、nRF54LM…

第二天

今天的编程小车课,完全是一场“找bug”的实战演练——小车一动不动地趴在桌上,我盯着线路板看了半天,连哪里出问题都不知道,从硬件、程序到设备状态,一步步拆解问题,瞬间清晰多了。 先查硬件连接时,我才发现L29…

wordpress做过的大型网站山东济南网站建设公司

【习题】保存应用数据 判断题 首选项是关系型数据库。 错误(False) 应用中涉及到Student信息,如包含姓名,性别,年龄,身高等信息可以用首选项来存储。 错误(False) 同一应用或进程中每个文件仅存在一个Preferences实例。 正确(T…

怎么样建设自己的网站上海科技网站建设

从这一讲开始,我们将一起探讨设计模式的性能调优。在《Design Patterns: Elements of Reusable Object-Oriented Software》一书中,有 23 种设计模式的描述,其中,单例设计模式是最常用的设计模式之一。无论是在开源框架&#xff0…

毕业设计h5网站制作贵阳好的网站建设公司

import React, { Component } from react;class List extends Component {constructor(props) {super(props);}render() {return <div>1111</div>;} }export default List;

网站流量查询网站统计查询网站建设需要写语句吗

PEP 8是最古老的PEP之一&#xff0c;它向Python程序员提供了代码格式设置指南。PEP 8的篇幅很长&#xff0c;但大都与复杂的编码结构相关。 https://python.org/dev/peps/pep-0008/转载于:https://www.cnblogs.com/botoo/p/7830980.html

教做甜点的网站换友情链接的网站

朴素的 f[S]表示S到(1<<n)的期望次数 发现1的个数只增加不减少 所以可以类似拓扑序的图&#xff0c;然后枚举子集O(3^n)转移 没有优化的余地 另辟蹊径&#xff1a; 拆开每一位来看 t[i]表示第i位变成1的次数 ansE(max(t[i])) 根据min-max容斥 得到&#xff1a;ans∑E(t[i…

海口智能建站价格国外服务器租用价格

Description 给你一个字符串str&#xff0c;字符串中的字母都已按照升序排序&#xff0c;且只包含小写字母。另外给出一个目标字母target&#xff0c;请你寻找在这一有序字符串里比目标字母大的最小字母。 在比较时&#xff0c;字母是依序循环出现的。例如&#xff0c;str“ab…

福田专门做网站推广公司做网站怎么回本

41、计算机操作的最小时间单位是__________。A A. 时钟周期 B. 指令周期 C. CPU周期 D. 外围设备 42、微程序控制器中&#xff0c;机器指令与微指令的关系是__________。B A. 每一条机器指令由一条微指令来执行 B. 每一条机器指令由一段用微指令编成…

Win10服务器远程连接断开后.bat脚本进程中断的全面解决高效的方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

NRF54L15 两者结合的jlink保护机制(硬件+软件)

默认更安全:只有当硬件和软件两层都“解锁”时,调试端口才开放。 典型流程: 上电/复位时,硬件先根据 UICR.APPROTECT 决定是否允许软件控制。 如果硬件允许,固件可通过写 APPROTECT.DISABLE 临时解锁调试端口(直…

软件测试员的核心技能:一文掌握等价类划分与边界值分析

等价类划分和边界值分析,看似简单,却是测试工程师安身立命的根本。它们体现了测试工作的精髓:在混沌中建立秩序,在无限中寻找有限,在风险最高的地方投入精力。引言:我们不是在“挑刺”,而是在“守护” 作为一名…

最精品网站建设如何将自己做的网站放到网上

ChatGPT插件平台有望成为影响深远的"下一件大事"&#xff0c;因此对于开发者来说&#xff0c;有必要对ChatGPT插件的开发有一定的了解。原文: Writing a ChatGPT Plugin With Go[1] 我工作的附带福利之一是偶尔可以接触试用一些很酷的新技术&#xff0c;最近的一项技…

《CBI 技术有聊》对话 OpenCSG:智能体落地困境与企业转型的必然路径

智能体热潮下的冷思考 2025 年,“智能体(Agent)”无疑是 AI 行业的焦点。它被称为继“大模型”之后的第二次浪潮,资本热情与行业跟风让它迅速升温。然而,在热潮背后,企业的现实却并不乐观:算力闲置、数据不足、…

汕头个人网站推广建设提升审美网站

为什么80%的码农都做不了架构师&#xff1f;>>> 1.面试题 例如&#xff1a; ip计算后的值&#xff1d;53文本内容&#xff1a;1,100,北京 101,1000,上海 1001,3001,广州 ...求ip53对应的省份2.代码如下&#xff1a; #!/usr/bin/python # coding: utf8def ip_find(i…