自定义注解+拦截器优化项目代码
自定义注解+拦截器的优势
类似用户权限或者接口限流的需求,但并不是所有操作或者接口需要。可以使用过滤器或者拦截器,但这样就必须在配置文件里加上所有方法或者使用通配符。
所以可以采用一种比较简单灵活的方式:采用自定义注解加Spring拦截器来实现。
编写示例
例如我们现在要做个接口的计数器限流,只需要像下面这样,加上一个注解即可。定义为每seconds秒内,最大访问量maxCount。
@AccessLimit(seconds=5, maxCount=5)
@RequestMapping(value="/path", method=RequestMethod.GET)
@ResponseBody
public Result<String> getMiaoshaPath(...) {// 业务逻辑代码
}
注解定义如下:
@Retention(RUNTIME)
@Target(METHOD)
public @interface AccessLimit {int seconds();int maxCount();
}
配合拦截器使用,使注解生效:
@Service
public class AccessInterceptor extends HandlerInterceptorAdapter{@AutowiredRedisService redisService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {if(handler instanceof HandlerMethod) {MiaoshaUser user = getUser(request, response);UserContext.setUser(user);HandlerMethod hm = (HandlerMethod)handler;AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);if(accessLimit == null) {return true;}int seconds = accessLimit.seconds();int maxCount = accessLimit.maxCount();String key = request.getRequestURI();Integer count = redisService.get(key);if(count == null) {// 定义一个seconds有效期的keyredisService.set(key, 1, seconds);}else if(count < maxCount) {redisService.incr(key);}else {return false;}}return true;}
}
自定义注解+拦截器优化项目代码相关推荐
- springboot 自定义注解拦截器
springboot 自定义注解拦截器 最近在工作中,发现自定义注解拦截使用起来特别方便,现在来写出来给大家看看 环境springboot 首先写一个自定义注解 package com.study.c ...
- 在SpringBoot项目中,自定义注解+拦截器优雅的实现敏感数据的加解密!
在实际生产项目中,经常需要对如身份证信息.手机号.真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密.漏加密.业务人员需要知道实际的加密规则等 ...
- Springboot + redis + 注解 + 拦截器来实现接口幂等性校验
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wangzaiplus www.jianshu.com/p/ ...
- springboot + redis + 注解 + 拦截器 实现接口幂等性校验
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://www.jianshu.com/p/6189275403ed 一.概念 ...
- Dubbo自定义日志拦截器
前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...
- @slf4j注解_SpringBoot + Redis + 注解 + 拦截器 实现接口幂等性校验
一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多 ...
- redis 判断存在性_springboot + redis + 注解 + 拦截器 实现接口幂等性校验
提醒:后面有些图片模糊,请点击原文查看清晰图片 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同 ...
- Dubbo自定义日志拦截器 1
前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...
- springboot幂等性_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次 ...
最新文章
- centos6 搭建heartbeat
- 共建网络安全堤坝,守住网络安全底线
- python实现文件下载-python实现上传下载文件功能
- 天梯赛 L2-005 集合相似度 (set容器)
- Photoshop 保存PNG格式交错和不交错有差别
- 【PAT - 甲级1045】Favorite Color Stripe(30分)(dp,LIS类问题)
- 拓端tecdat|R语言实现 Copula 算法建模相依性案例分析报告
- 基于JAVA个人饮食营养管理信息系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- 即时通信聊天工具的原理与设计
- 2021年中国图书出版行业经营现状及重点企业对比分析:凤凰传媒优势明显[图]
- 【ONE·Linux || 权限 】
- love2d与imgui
- html放大镜,可清晰放大整个网页
- mysql 闰年,[MySQL]--gt;查询5天之内过生日的同事中的闰年2月
- OC桥接Swift学习记录
- 河钢唐钢微尔云计算中心对外签订首个合同
- 职场上,怎么对待那些总是以领导口吻给自己安排工作的同事
- TrustZone技术简介
- 主流的音视频SDK调研
- 嵌入式linux技能,学IT技能 学嵌入式Linux必知内容