AOP Redis自定义注解实现细粒度接口IP访问限制
目录
- 系列说明
- 实现步骤
- 一、引入依赖
- 二、写注解
- 三、写逻辑(注解环绕)
- 1. 添加注解
- 2. 注入 RedisTemplate
- 3. 定义方法
- 4. 实现方法
- 5. 开启spring自动装配
- 四、测试
- 总结
系列说明
GitHub地址:github.com/stick-i/scb…
目前项目还有很大改进和完善的空间,欢迎各位有意愿的同学参与项目贡献(尤其前端),一起学习一起进步。
项目的技术栈主要是:
后端 Java + SpringBoot + SpringCloud + Nacos + Getaway + Fegin + MybatisPlus + MySQL + Redis + ES + RabbitMQ + Minio + 七牛云OSS + Jenkins + Docker
前端 Vue + ElementUI + Axios(说实话前端我不太清楚)
一般向外暴露的接口,都需要加上一个访问限制,以防止有人恶意刷流量或者爆破,访问限制的做法有很多种,从控制粒度上来看可以分为:全局访问限制和接口访问限制,本文讲的是接口访问的限制。
本章讲解的主要内容在项目中的位置:
scblogs / common / common-web / src / main / java / cn / sticki / common / web / anno /
我的写法是基于 AOP + 自定义注解 + Redis,并且封装在一个单独的模块 common-web
下,需要使用的模块只需引入该包,并且给需要限制的方法添加注解即可,很方便,且松耦合。
唯一的缺点是该方法只支持在方法上添加注解,不支持给类添加,如果想给一个类的所有方法添加上限制,则必须给该类的所有方法都加上该注解才行
相关推荐
-
Redis+AOP+自定义注解实现限流
目录 Redis安装 下载 解压 准备编译 编译 测试编译 安装 配置 运行 检查端口是否在使用中 查看redis的当前版本: 使redis可以用systemd方式启动和管理 查看本地centos的版本: 客户端连接redis Redis限流 1.引入依赖 2.application.yml配置 3.创建redisConfig,引入redisTemplate 自定义注解和拦截器 1.自定义注解 2.创建拦截器 3.将自定义拦截器加入到拦截器列表中 Redis安装 一提到Redis,相信大家都不会
-
浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现)
第一章 需求分析 计划在Team的开源项目里加入Redis实现缓存处理,因为业务功能已经实现了一部分,通过写Redis工具类,然后引用,改动量较大,而且不可以实现解耦合,所以想到了Spring框架的AOP(面向切面编程). 开源项目:https://github.com/u014427391/jeeplatform 第二章 SpringBoot简介 Spring框架作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多,所以知识量很广.
-
Spring AOP如何整合redis(注解方式)实现缓存统一管理详解
前言 项目使用redis作为缓存数据,但面临着问题,比如,项目A,项目B都用到redis,而且用的redis都是一套集群,这样会带来一些问题. 问题:比如项目A的开发人员,要缓存一些热门数据,想到了redis,于是乎把数据放入到了redis,自定义一个缓存key:hot_data_key,数据格式是项目A自己的数据格式,项目B也遇到了同样的问题,也要缓存热门数据,也是hot_data_key,数据格式是项目B是自己的数据格式,由于用的都是同一套redis集群,这样key就是同一个key,有的数据
-
Spring AOP实现Redis缓存数据库查询源码
应用场景 我们希望能够将数据库查询结果缓存到Redis中,这样在第二次做同样的查询时便可以直接从redis取结果,从而减少数据库读写次数. 需要解决的问题 操作缓存的代码写在哪?必须要做到与业务逻辑代码完全分离. 如何避免脏读? 从缓存中读出的数据必须与数据库中的数据一致. 如何为一个数据库查询结果生成一个唯一的标识?即通过该标识(Redis中为Key),能唯一确定一个查询结果,同一个查询结果,一定能映射到同一个key.只有这样才能保证缓存内容的正确性 如何序列化查询结果?查询结果可能是单个实体
-
SpringBoot AOP控制Redis自动缓存和更新的示例
导入redis的jar包 <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.0.4.RELEASE</version> </dependency> 编写自定义缓存注解 /**
-
使用AOP+redis+lua做方法限流的实现
目录 需求 实现方式 源码 Limit 注解 LimitKey LimitType RedisLimiterHelper LimitInterceptor TestService 需求 公司里使用OneByOne的方式删除数据,为了防止一段时间内删除数据过多,让我这边做一个接口限流,超过一定阈值后报异常,终止删除操作. 实现方式 创建自定义注解 @limit 让使用者在需要的地方配置 count(一定时间内最多访问次数). period(给定的时间范围),也就是访问频率.然后通过LimitInt
-
AOP Redis自定义注解实现细粒度接口IP访问限制
目录 系列说明 实现步骤 一.引入依赖 二.写注解 三.写逻辑(注解环绕) 1. 添加注解 2. 注入 RedisTemplate 3. 定义方法 4. 实现方法 5. 开启spring自动装配 四.测试 总结 系列说明 GitHub地址:github.com/stick-i/scb… 目前项目还有很大改进和完善的空间,欢迎各位有意愿的同学参与项目贡献(尤其前端),一起学习一起进步. 项目的技术栈主要是: 后端 Java + SpringBoot + SpringCloud + Nacos +
-
SpringBoot基于redis自定义注解实现后端接口防重复提交校验
目录 一.添加依赖 二.代码实现 三.测试 一.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.4.RELEASE</version> </dependency> <dependency> <
-
Spring Boot 通过AOP和自定义注解实现权限控制的方法
本文介绍了Spring Boot 通过AOP和自定义注解实现权限控制,分享给大家,具体如下: 源码:https://github.com/yulc-coding/java-note/tree/master/aop 思路 自定义权限注解 在需要验证的接口上加上注解,并设置具体权限值 数据库权限表中加入对应接口需要的权限 用户登录时,获取当前用户的所有权限列表放入Redis缓存中 定义AOP,将切入点设置为自定义的权限 AOP中获取接口注解的权限值,和Redis中的数据校验用户是否存在该权限,如果R
-
详解使用Spring AOP和自定义注解进行参数检查
引言 使用SpringMVC作为Controller层进行Web开发时,经常会需要对Controller中的方法进行参数检查.本来SpringMVC自带@Valid和@Validated两个注解可用来检查参数,但只能检查参数是bean的情况,对于参数是String或者Long类型的就不适用了,而且有时候这两个注解又突然失效了(没有仔细去调查过原因),对此,可以利用Spring的AOP和自定义注解,自己写一个参数校验的功能. 代码示例 注意:本节代码只是一个演示,给出一个可行的思路,并非完整的解决
-
Spring AOP 实现自定义注解的示例
自工作后,除了一些小项目配置事务使用过 AOP,真正自己写 AOP 机会很少,另一方面在工作后还没有写过自定义注解,一直很好奇注解是怎么实现他想要的功能的,刚好做项目的时候,经常有人日志打得不够全,经常出现问题了,查日志的才发现忘记打了,所以趁此机会,搜了一些资料,用 AOP + 自定义注解,实现请求拦截,自定义打日志,玩一下这两个东西,以下是自己完的一个小例子,也供需要的同学参考. 1. 注解如下: package cn.bridgeli.demo.annotation; import j
-
详解使用Spring Boot的AOP处理自定义注解
上一篇文章Java 注解介绍讲解了下Java注解的基本使用方式,并且通过自定义注解实现了一个简单的测试工具:本篇文章将介绍如何使用Spring Boot的AOP来简化处理自定义注解,并将通过实现一个简单的方法执行时间统计工具为样例来讲解这些内容. AOP概念 面向侧面的程序设计(aspect-oriented programming,AOP,又译作面向方面的程序设计.观点导向编程.剖面导向程序设计)是计算机科学中的一个术语,指一种程序设计范型.该范型以一种称为侧面(aspect,又译作方面)的语
-
Spring Boot之AOP配自定义注解的最佳实践过程
前言 AOP(Aspect Oriented Programming),即面向切面编程,是Spring框架的大杀器之一. 首先,我声明下,我不是来系统介绍什么是AOP,更不是照本宣科讲解什么是连接点.切面.通知和切入点这些让人头皮发麻的概念. 今天就来说说AOP的一些应用场景以及如何通过和其他特性的结合提升自己的灵活性.下面话不多说了,来一起看看详细的介绍吧 AOP应用举例 AOP的一大好处就是解耦.通过切面,我们可以将那些反复出现的代码抽取出来,放在一个地方统一处理. 同时,抽出来的代码很多是
-
SpringBoot中利用AOP和拦截器实现自定义注解
目录 前言 Spring实现自定义注解 1.引入相关依赖 2.相关类 Java实现自定义注解 通过Cglib实现 通过JDk动态代理实现 Cglib和JDK动态代理的区别 写在最后 前言 最近遇到了这样一个工作场景,需要写一批dubbo接口,再将dubbo接口注册到网关中,但是当dubbo接口异常的时候会给前端返回非常不友好的异常.所以就想要对异常进行统一捕获处理,但是对于这种service接口使用@ExceptionHandler注解进行异常捕获也是捕获不到的,应为他不是Controller的
-
基于注解实现 SpringBoot 接口防刷的方法
该示例项目通过自定义注解,实现接口访问次数控制,从而实现接口防刷功能,项目结构如下: 一.编写注解类 AccessLimit package cn.mygweb.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Targ
-
Feign如何自定义注解翻译器
目录 Feign自定义注解翻译器 新建自定义注解MyUrl 新建接口,使用MyUrl注解 定义注解翻译器 测试类 启动服务类 Feign注解说明 Feign自定义注解翻译器 新建自定义注解MyUrl package org.crazyit.cloud.contract; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Reten
随机推荐
- java单例模式实现面板切换
- jquery中ajax跨域方法实例分析
- 正则表达式日常收集整理(简单且实用)
- BootStrap数据表格实例代码
- 简单实用的网页表格特效
- javascript 用局部变量来代替全局变量第1/2页
- js模仿php中strtotime()与date()函数实现方法
- JavaScript实现Java中StringBuffer的方法
- Web.config 和 App.config 的区别分析
- Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
- 详解远程连接Mysql数据库的问题(ERROR 2003 (HY000))
- PHP爬虫之百万级别知乎用户数据爬取与分析
- C# WinForm国际化实现的简单方法
- 实现自动清除日期目录shell脚本实例代码
- Javascript学习笔记之数组的遍历和 length 属性
- 让人蛋疼的JavaScript语法特性
- node.js缺少mysql模块运行报错的解决方法
- Linux下非交互式提权详解
- java 工厂模式的实例详解
- Android中实现圆角图片的几种方法