技术经验分享: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


当前请求的参数

相关文章
|
6月前
|
Web App开发 人工智能 Java
技术经验分享:affineCipherandafineHacker
技术经验分享:affineCipherandafineHacker
41 2
|
2月前
|
人工智能 算法 大数据
技术之旅:从新手到专家的蜕变####
【10月更文挑战第20天】 本文探讨了个人在技术领域的成长历程,通过真实案例与深刻感悟,揭示了持续学习、实践积累与心态调整的重要性,为读者提供了一条从技术新手迈向专家的可行路径。 ####
36 8
|
3月前
|
Java 关系型数据库 API
后端开发之道:从新手到专家的蜕变之旅
在数字化时代的浪潮中,后端开发如同一座桥梁,连接着数据世界的每一个角落。本文将带领读者踏上一段从零基础到精通后端开发的旅程,探索编程语言的选择、框架的应用、数据库的设计以及API的开发等关键知识点。我们将以通俗易懂的语言,结合条理清晰的结构,逐步揭开后端开发的神秘面纱,让每一位读者都能在这段旅途中找到属于自己的位置和方向。
|
4月前
|
机器学习/深度学习 人工智能 算法
技术成长之路:从新手到专家的心路历程
【8月更文挑战第9天】在技术的世界里,每个人都是从零开始。本文将通过个人经历,探讨如何在技术的海洋中不断学习和成长,最终成为领域内的专家。我们将一起回顾那些挑战与成就,以及它们如何塑造了一个技术人员的职业轨迹。
|
4月前
|
人工智能 算法 大数据
探索技术之路:从初心到精通的旅程
【8月更文挑战第21天】在不断变化的技术世界里,每个人都是旅行者。我们带着对未知的好奇和对技术的热爱,踏上了一段既充满挑战又令人兴奋的旅程。本文将分享个人从初入技术领域的迷茫,到不断学习、实践并最终找到自我方向的经历。通过这个过程,我们将探讨如何在技术的海洋中保持初心,持续成长,并对未来抱有希望。
|
4月前
|
程序员 开发者
技术成长之旅:从新手到专家的蜕变之路
【8月更文挑战第8天】在技术的海洋中,每一位程序员都曾是一名初学者。本文将通过个人经历和行业观察,探讨如何从技术新手成长为领域专家的过程。我们将深入讨论持续学习、实践、反思、交流与创新的重要性,并分享一些实用的成长策略。无论你是刚刚起步的技术爱好者,还是正在追求更高成就的资深开发者,这篇文章都将为你提供宝贵的启示和指导。
|
6月前
技术经验分享:comparisonmethodviolates必现
技术经验分享:comparisonmethodviolates必现
27 0
技术经验分享:comparisonmethodviolates必现
|
6月前
|
应用服务中间件 PHP nginx
技术经验分享:fastcgimain
技术经验分享:fastcgimain
|
6月前
|
C++
技术经验分享:C++程序设计的技巧
技术经验分享:C++程序设计的技巧
43 0
|
6月前
技术经验分享:HLG1314火影忍者之~纲手
技术经验分享:HLG1314火影忍者之~纲手
110 0