自定义注解+拦截器的优势

类似用户权限或者接口限流的需求,但并不是所有操作或者接口需要。可以使用过滤器或者拦截器,但这样就必须在配置文件里加上所有方法或者使用通配符。
所以可以采用一种比较简单灵活的方式:采用自定义注解加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;}
}

自定义注解+拦截器优化项目代码相关推荐

  1. springboot 自定义注解拦截器

    springboot 自定义注解拦截器 最近在工作中,发现自定义注解拦截使用起来特别方便,现在来写出来给大家看看 环境springboot 首先写一个自定义注解 package com.study.c ...

  2. 在SpringBoot项目中,自定义注解+拦截器优雅的实现敏感数据的加解密!

    在实际生产项目中,经常需要对如身份证信息.手机号.真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密.漏加密.业务人员需要知道实际的加密规则等 ...

  3. Springboot + redis + 注解 + 拦截器来实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wangzaiplus www.jianshu.com/p/ ...

  4. springboot + redis + 注解 + 拦截器 实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://www.jianshu.com/p/6189275403ed 一.概念 ...

  5. Dubbo自定义日志拦截器

    前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...

  6. @slf4j注解_SpringBoot + Redis + 注解 + 拦截器 实现接口幂等性校验

    一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多 ...

  7. redis 判断存在性_springboot + redis + 注解 + 拦截器 实现接口幂等性校验

    提醒:后面有些图片模糊,请点击原文查看清晰图片 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同 ...

  8. Dubbo自定义日志拦截器 1

    前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...

  9. springboot幂等性_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

    一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次 ...

最新文章

  1. centos6 搭建heartbeat
  2. 共建网络安全堤坝,守住网络安全底线
  3. python实现文件下载-python实现上传下载文件功能
  4. 天梯赛 L2-005 集合相似度 (set容器)
  5. Photoshop 保存PNG格式交错和不交错有差别
  6. 【PAT - 甲级1045】Favorite Color Stripe(30分)(dp,LIS类问题)
  7. 拓端tecdat|R语言实现 Copula 算法建模相依性案例分析报告
  8. 基于JAVA个人饮食营养管理信息系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  9. 即时通信聊天工具的原理与设计
  10. 2021年中国图书出版行业经营现状及重点企业对比分析:凤凰传媒优势明显[图]
  11. 【ONE·Linux || 权限 】
  12. love2d与imgui
  13. html放大镜,可清晰放大整个网页
  14. mysql 闰年,[MySQL]--gt;查询5天之内过生日的同事中的闰年2月
  15. OC桥接Swift学习记录
  16. 河钢唐钢微尔云计算中心对外签订首个合同
  17. 职场上,怎么对待那些总是以领导口吻给自己安排工作的同事
  18. TrustZone技术简介
  19. 主流的音视频SDK调研
  20. 嵌入式linux技能,学IT技能 学嵌入式Linux必知内容

热门文章

  1. 知识付费消停了,广播剧2019要从小众狂欢走向大众化?
  2. 用Python批量把EXCEL表格中的数据提交到网页上
  3. Android——TextView指定字符串颜色高亮,实现类似微信、支付宝搜索结果中搜索字段高亮的效果
  4. BlueStacks让 Android 应用跑在 Windows 平台上!
  5. Mac 系统mysql密码重置
  6. 柴静雾霾调查:穹顶之下 同呼吸共命运
  7. 还贷的那些事III——等额还贷的计算
  8. 软件工程——结构化分析方法
  9. 尼克尔镜头上边的字表示什么?
  10. 笔记丨元胞自动机模拟城市扩张过程