牛X!一个注解搞定接口防刷!

简介: 说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考。技术要点:springboot的基本知识,redis基本操作。首先是写一个注解类:

image.png

import com.alibaba.fastjson.JSON;
import com.example.demo.action.AccessLimit;
import com.example.demo.redis.RedisService;
import com.example.demo.result.CodeMsg;
import com.example.demo.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
/**
 * @author yhq
 * @date 2018/9/10 16:05
 */
@Component
public class FangshuaInterceptor extends HandlerInterceptorAdapter {
    @Autowired
    private RedisService redisService;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //判断请求是否属于方法的请求
        if(handler instanceof HandlerMethod){
            HandlerMethod hm = (HandlerMethod) handler;
            //获取方法中的注解,看是否有该注解
            AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);
            if(accessLimit == null){
                return true;
            }
            int seconds = accessLimit.seconds();
            int maxCount = accessLimit.maxCount();
            boolean login = accessLimit.needLogin();
            String key = request.getRequestURI();
            //如果需要登录
            if(login){
                //获取登录的session进行判断
                //.....
                key+=""+"1";  //这里假设用户是1,项目中是动态获取的userId
            }
            //从redis中获取用户访问的次数
            AccessKey ak = AccessKey.withExpire(seconds);
            Integer count = redisService.get(ak,key,Integer.class);
            if(count == null){
                //第一次访问
                redisService.set(ak,key,1);
            }else if(count < maxCount){
                //加1
                redisService.incr(ak,key);
            }else{
                //超出访问次数
                render(response,CodeMsg.ACCESS_LIMIT_REACHED); //这里的CodeMsg是一个返回参数
                return false;
            }
        }
        return true;
    }
    private void render(HttpServletResponse response, CodeMsg cm)throws Exception {
        response.setContentType("application/json;charset=UTF-8");
        OutputStream out = response.getOutputStream();
        String str  = JSON.toJSONString(Result.error(cm));
        out.write(str.getBytes("UTF-8"));
        out.flush();
        out.close();
    }
}

image.pngimage.png本文有参考其他视频的教学,希望可以帮助更多热爱it行业的人,


作者:CS打赢你

本文链接:https://blog.csdn.net/weixin_42533856/article/details/82593123\ 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。


近期热文推荐:


1.Java 15 正式发布, 14 个新特性,刷新你的认知!!


2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!


3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。


4.吊打 Tomcat ,Undertow 性能很炸!!


5.《Java开发手册(嵩山版)》最新发布,速速下载!


觉得不错,别忘了随手点赞+转发哦!


相关文章
|
人工智能 Python
子曰-o1:网易有道开源国内首个分步式讲解推理模型,支持K12数学教学
子曰-o1是网易有道推出的国内首个分步式讲解推理模型,采用14B轻量级架构,专为消费级显卡设计,支持K12数学教学,提供精准的解题思路和答案。
729 1
子曰-o1:网易有道开源国内首个分步式讲解推理模型,支持K12数学教学
|
内存技术
基于MATLAB的PCM的编码译码仿真
基于MATLAB的PCM的编码译码仿真
939 1
|
云安全 数据采集 弹性计算
阿里云安全:云服务器的重要防护与用户安全设置
随着云计算的快速发展和普及,保护数据和信息的安全至关重要,阿里云作为国内领先的云计算服务提供商,其产品和服务广泛应用于各个领域。而在使用阿里云服务的过程中,阿里云非常重视用户数据的安全性,并通过多重安全防护机制来保护其云服务器,安全问题也是用户非常关注的问题,尤其是企业级用户。本文将详细介绍阿里云服务器的安全防护措施,以及用户日常如何设置云产品的安全。
2300 1
阿里云安全:云服务器的重要防护与用户安全设置
|
存储 缓存 网络协议
[计算机网络(第八版)]第一章 概述(章节测试 + 章节作业 + 答案解析)
[计算机网络(第八版)]第一章 概述(章节测试 + 章节作业 + 答案解析)
|
JavaScript
echarts柱状图X轴底部文字有的不显示出来?
echarts柱状图X轴底部文字有的不显示出来?
906 0
echarts柱状图X轴底部文字有的不显示出来?
|
缓存 移动开发 边缘计算
淘宝拍照基于端云协同的视频流实时搜索实践
淘宝拍照基于端云协同的视频流实时搜索实践
693 0
|
机器学习/深度学习
ReLU 激活函数中神经元死亡问题
ReLU 激活函数中神经元死亡问题
974 0
|
存储 数据采集 分布式计算
实时大数据处理real-time big data processing (RTDP)框架:挑战与解决方案
实时大数据处理real-time big data processing (RTDP)框架:挑战与解决方案
|
消息中间件 存储 程序员
计算机操作系统(慕课版)第二章课后题答案
计算机操作系统(慕课版)第二章课后题答案
1669 0
|
SQL Oracle 关系型数据库
能与PowerDesigner媲美的数据库建模工具PDMan
在设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。
643 0
能与PowerDesigner媲美的数据库建模工具PDMan

热门文章

最新文章