• braum的使用


    添加依赖

    <dependency>
        <groupId>me.zhyd.braum.spring.boot</groupId>
        <artifactId>braum-spring-boot-starter</artifactId>
        <version>1.0.0-alpha</version>
    </dependency>

    相关配置

    braum.limit.access.threshold=20# 连续访问最高阀值,超过该值则认定为恶意操作的IP。单位:次 默认为20
    braum.limit.access.interval=5000# 间隔时间,在该时间内如果访问次数大于阀值,则记录为恶意IP,否则视为正常访问。单位:毫秒(ms),默认为 5秒
    braum.limit.access.limitedTime=60000# 当检测到恶意访问时,对恶意访问的ip进行限制的时间。单位:毫秒(ms),默认为 1分钟
    braum.limit.access.blacklistTime=2592000000# 黑名单存在的时间,在单位时间内用户访问受限的次数累加。单位:毫秒(ms),默认为 1个月
    braum.limit.access.type=map# 缓存类型,默认为map存储,可选值(map、redis)

     开启Braum

    在启动类上添加@EnableBraumConfiguration注解

    import me.zhyd.braum.spring.boot.annotation.EnableBraumConfiguration;
    @SpringBootApplication
    @EnableBraumConfiguration
    public class BraumApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BraumApplication.class, args);
        }
    }

    在controller中处理

    @RestController
    public class BraumController {
    
        @Autowired
        BraumProcessor processor;
        @Autowired
        HttpServletRequest request;
    
        @RequestMapping("/")
        public Object index() {
            BraumResponse r = processor.process(request);
            if (r.getCode() == CommonConst.ERROR) {
                return "你已涉嫌恶意访问被临时禁止,请文明上网";
            }
            return "Hello world!";
        }
    }
    在拦截器中使用

    拦截器

    @Component
    public class BraumIntercepter implements HandlerInterceptor {
        private static final Logger log = LoggerFactory.getLogger(BraumIntercepter.class);
        private static final int SUCCESS = 1;
        private static List<String> msgList = new ArrayList<>();
    
        static {
            msgList.add("Wow...您太冲动了,先喝杯咖啡冷静下。");
            msgList.add("Wow...一杯不够?那再来一杯。");
            msgList.add("还不够?再来一杯!");
            msgList.add("你就不怕被撑死么?");
            msgList.add("古恩吧,不接你这种客了");
            msgList.add("古恩!");
        }
    
        @Autowired
        private BraumProcessor processor;
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            BraumResponse r = processor.process(request);
            if (r.getCode() == SUCCESS) {
                return true;
            }
            String msg = r.getLimitCount() > msgList.size() ? msgList.get(msgList.size() - 1) : msgList.get(r.getLimitCount() - 1);
            log.info(msg);
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.write(msg);
            writer.flush();
            writer.close();
            return false;
        }
    }

     返回说明

    字段释义
    code 响应码(1:正常,0:受限制)
    msg 返回内容
    expire 当请求被限制时该值不为0,表示为被限制的剩余时间,单位毫秒
    limitCount 当请求被限制时该值不为0,表示为被限制的次数
    accessInfo 本次发起请求的内容

    accessInfo字段

    字段释义
    ip 当前访问IP
    ua 当前用户的UA
    referer 请求来源
    requestUrl 当前请求的地址
    params 当前请求的参数
  • 相关阅读:
    第一次个人编程作业
    第一次软工作业
    [Manacher]最长回文子串
    面向对象程序设计 总结作业
    面向对象程序设计 小黄衫晒单
    面向对象程序设计 作业三
    面向对象程序设计 作业二
    面向对象程序设计 作业一
    SSD/Memory技术学习拼图
    第一次结对编程作业
  • 原文地址:https://www.cnblogs.com/hongmaju/p/15560251.html
Copyright © 2020-2023  润新知