技术经验分享:braum的使用

简介: 技术经验分享:braum的使用

添加依赖


me.zhyd.braum.spring.boot


braum-spring-boot-starter


1.0.0-alpha


相关配置


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 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;


}


}

//代码效果参考: http://www.lyjsj.net.cn/wz/art_23040.html


返回说明


字段释义


code


响应码(1:正常,0:受限制)


msg


返回内容


expire


当请求被限制时该值不为0,表示为被限制的剩余时间,单位毫秒


limitCount


当请求被限制时该值不为0,表示为被限制的次数


accessInfo


本次发起请求的内容


accessInfo字段


字段释义


ip


当前访问IP


ua


当前用户的UA


referer


请求来源


requestUrl


当前请求的地址


params


当前请求的参数

相关文章
有关element UI el-table 跟el-dialog搭配使用出现的问题,背景问题,穿透问题
有关element UI el-table 跟el-dialog搭配使用出现的问题,背景问题,穿透问题
737 0
|
数据可视化 Docker Python
【保姆级】Python项目(Flask网页)部署到Docker的完整过程
相信看到这篇文章的读者应该已经学会了Docker的安装以及Docker的基本使用,如果还不会的可以参考我之前的文章进行详细学习!
1515 0
xxl-job执行器启动报错读取不到配置文件Could not resolve placeholder ‘xxl.job.executor.address‘ in value “${xxl.job
有几个不用配置的属性,也要写出来,不填值就行 但是最后一个日志天数得写,写个-1。不然空字符串无法转成数字
|
XML Java 数据格式
Spring注解开发管理第三方bean及依赖注入
Spring注解开发管理第三方bean及依赖注入
270 0
|
5月前
|
算法 Java 测试技术
Java 从入门到实战完整学习路径与项目实战指南
本文详细介绍了“Java从入门到实战”的学习路径与应用实例,涵盖基础、进阶、框架工具及项目实战四个阶段。内容包括环境搭建、语法基础、面向对象编程,数据结构与算法、多线程并发、JVM原理,以及Spring框架等核心技术。通过学生管理系统、文件下载器和博客系统等实例,帮助读者将理论应用于实践。最后,提供全链路电商系统的开发方案,涉及前后端技术栈与分布式架构。附代码资源链接,助力成为合格的Java开发者。
234 4
|
运维 关系型数据库 分布式数据库
PolarDB产品使用问题之如何修改默认端口号
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
Java中的枚举类型详解:应用与最佳实践
Java中的枚举类型详解:应用与最佳实践
|
关系型数据库 API C#
C#调用执行命令行窗口cmd,及需要交互执行的处理
C#执行外部程序用到的是Process进程类,打开一个进程,可以指定进程的启动信息StartInfo(启动的程序名、输入输出是否重定向、是否显示UI界面、一些必要参数等)...
4121 0
C#调用执行命令行窗口cmd,及需要交互执行的处理
|
Linux Windows
教你在Linux上安装Node并用Electron打包deb和rpm包
教你在Linux上安装Node并用Electron打包deb和rpm包
919 9