package com.example.demo.Interceptor;
import com.alibaba.fastjson.JSON;
import com.example.demo.Utils.IpAdrressUtil;
import com.example.demo.Utils.RedisUtil;
import com.example.demo.entity.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Slf4j
@Component
@RequiredArgsConstructor
public class IpUrlLimitInterceptor implements HandlerInterceptor {
private final RedisUtil redisUtil;
private static final String LOCK_IP_URL_KEY = "lock_ip_";
private static final String IP_URL_REQ_TIME = "ip_url_times_";
private static final long LIMIT_TIMES = 5;
private static final String IP_LOCK_TIME = "60";
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
log.info("request请求地址uri={},ip={}", httpServletRequest.getRequestURI(), IpAdrressUtil.getIpAddr(httpServletRequest));
if (ipIsLock(IpAdrressUtil.getIpAddr(httpServletRequest))) {
log.info("ip访问被禁止={}", IpAdrressUtil.getIpAddr(httpServletRequest));
returnJson(httpServletResponse, JSON.toJSONString(Result.success("ip访问被禁止")));
return false;
}
if (!addRequestTime(IpAdrressUtil.getIpAddr(httpServletRequest), httpServletRequest.getRequestURI())) {
returnJson(httpServletResponse, JSON.toJSONString(Result.success("ip访问被禁止")));
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
/**
* 判断ip是否被禁用
*
* @param ip
* @return
*/
private Boolean ipIsLock(String ip) {
if (redisUtil.hasKey(LOCK_IP_URL_KEY + ip)) {
return true;
}
return false;
}
/**
* 记录请求次数
*
* @param ip
* @param uri
* @return
*/
private Boolean addRequestTime(String ip, String uri) {
String key = IP_URL_REQ_TIME + ip + uri;
if (redisUtil.hasKey(key)) {
// 如果key存在,次数+1
long time = redisUtil.incr(key, (long) 1);
log.info("time:{}", time);
if (time >= LIMIT_TIMES) {
// 如果超过限制次数,则设置ip被禁用 60秒
redisUtil.getLock(LOCK_IP_URL_KEY + ip, ip, IP_LOCK_TIME);
return false;
}
} else {
// ip+uri请求次数为1,1秒后过期
redisUtil.getLock(key, "1", "1");
log.info("记录请求次数1");
}
return true;
}
private void returnJson(HttpServletResponse response, String json) throws Exception {
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(json);
} catch (IOException e) {
log.error("LoginInterceptor response error ---> {}", e.getMessage(), e);
} finally {
if (writer != null) {
writer.close();
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
springboot基于redis防止接口恶意刷新和暴力请求
共109个文件
xml:85个
class:10个
java:10个
需积分: 20 4 下载量 149 浏览量
2023-01-17
16:16:24
上传
评论
收藏 77KB ZIP 举报
温馨提示
资源相关博客:https://blog.csdn.net/u013938578/article/details/128717396
资源推荐
资源详情
资源评论
收起资源包目录
springboot基于redis防止接口恶意刷新和暴力请求 (109个子文件)
Result.class 8KB
IpUrlLimitInterceptor.class 5KB
RedisUtil.class 4KB
ResultCode.class 2KB
RedisConfig.class 2KB
MyWebAppConfig.class 2KB
IpAdrressUtil.class 2KB
TestController.class 1KB
SpringbootApplication.class 751B
IResultCode.class 188B
springboot-redisIpUrlLimit.iml 10KB
IpUrlLimitInterceptor.java 4KB
Result.java 3KB
RedisUtil.java 2KB
IpAdrressUtil.java 2KB
RedisConfig.java 1KB
ResultCode.java 930B
MyWebAppConfig.java 869B
TestController.java 572B
SpringbootApplication.java 338B
IResultCode.java 121B
springboot-redisIpUrlLimit.kotlin_module 16B
workspace.xml 7KB
pom.xml 3KB
compiler.xml 869B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_7_8_SNAPSHOT.xml 806B
Maven__org_springframework_boot_spring_boot_starter_logging_2_7_8_SNAPSHOT.xml 785B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_7_8_SNAPSHOT.xml 778B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_7_8_SNAPSHOT.xml 771B
Maven__org_springframework_boot_spring_boot_starter_json_2_7_8_SNAPSHOT.xml 764B
Maven__org_springframework_boot_spring_boot_starter_test_2_7_8_SNAPSHOT.xml 764B
Maven__org_springframework_boot_spring_boot_starter_web_2_7_8_SNAPSHOT.xml 757B
Maven__org_springframework_data_spring_data_keyvalue_2_7_7_SNAPSHOT.xml 736B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_4.xml 736B
Maven__org_springframework_boot_spring_boot_starter_2_7_8_SNAPSHOT.xml 729B
Maven__org_springframework_data_spring_data_commons_2_7_7_SNAPSHOT.xml 729B
Maven__io_netty_netty_transport_native_unix_common_4_1_86_Final.xml 726B
Maven__org_springframework_data_spring_data_redis_2_7_7_SNAPSHOT.xml 715B
Maven__org_springframework_boot_spring_boot_starter_data_redis_2_7_0.xml 713B
Maven__org_springframework_boot_spring_boot_test_2_7_8_SNAPSHOT.xml 708B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 700B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_4.xml 695B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_4.xml 681B
Maven__org_springframework_boot_spring_boot_2_7_8_SNAPSHOT.xml 673B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_70.xml 660B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_4.xml 651B
Maven__com_fasterxml_jackson_core_jackson_databind_2_13_4_2.xml 644B
Maven__org_springframework_spring_context_support_5_3_25.xml 644B
Maven__org_junit_platform_junit_platform_commons_1_8_2.xml 633B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 633B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 633B
Maven__org_junit_platform_junit_platform_engine_1_8_2.xml 626B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_70.xml 625B
Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml 615B
Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml 615B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_70.xml 611B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 611B
Maven__org_springframework_spring_expression_5_3_25.xml 609B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml 608B
Maven__com_fasterxml_jackson_core_jackson_core_2_13_4.xml 602B
Maven__org_mockito_mockito_junit_jupiter_4_5_1.xml 598B
Maven__org_reactivestreams_reactive_streams_1_0_4.xml 595B
Maven__io_lettuce_lettuce_core_6_1_10_RELEASE.xml 594B
Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml 594B
Maven__io_netty_netty_transport_4_1_86_Final.xml 593B
Maven__org_springframework_spring_context_5_3_25.xml 588B
Maven__io_netty_netty_resolver_4_1_86_Final.xml 586B
Maven__net_bytebuddy_byte_buddy_agent_1_12_21.xml 585B
Maven__org_springframework_spring_webmvc_5_3_25.xml 581B
Maven__io_netty_netty_handler_4_1_86_Final.xml 579B
Maven__ch_qos_logback_logback_classic_1_2_11.xml 575B
Maven__org_springframework_spring_beans_5_3_25.xml 574B
Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml 573B
Maven__io_netty_netty_buffer_4_1_86_Final.xml 572B
Maven__io_netty_netty_common_4_1_86_Final.xml 572B
Maven__org_apiguardian_apiguardian_api_1_1_2.xml 572B
Maven__org_springframework_spring_test_5_3_25.xml 567B
Maven__org_springframework_spring_core_5_3_25.xml 567B
Maven__io_projectreactor_reactor_core_3_4_26.xml 566B
Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml 566B
Maven__io_netty_netty_codec_4_1_86_Final.xml 565B
Maven__org_springframework_spring_web_5_3_25.xml 560B
Maven__org_springframework_spring_aop_5_3_25.xml 560B
Maven__org_springframework_spring_oxm_5_3_25.xml 560B
Maven__org_springframework_spring_jcl_5_3_25.xml 560B
Maven__net_minidev_accessors_smart_2_4_8.xml 556B
Maven__ch_qos_logback_logback_core_1_2_11.xml 554B
Maven__org_springframework_spring_tx_5_3_25.xml 553B
Maven__com_jayway_jsonpath_json_path_2_7_0.xml 546B
Maven__net_bytebuddy_byte_buddy_1_12_21.xml 543B
Maven__org_assertj_assertj_core_3_22_0.xml 542B
Maven__org_skyscreamer_jsonassert_1_5_1.xml 537B
Maven__org_xmlunit_xmlunit_core_2_9_1.xml 535B
Maven__org_mockito_mockito_core_4_5_1.xml 535B
Maven__org_slf4j_jul_to_slf4j_1_7_36.xml 534B
Maven__org_opentest4j_opentest4j_1_2_0.xml 533B
Maven__org_projectlombok_lombok_1_18_24.xml 531B
Maven__net_minidev_json_smart_2_4_8.xml 521B
Maven__com_alibaba_fastjson_1_2_83.xml 514B
Maven__org_slf4j_slf4j_api_1_7_36.xml 513B
共 109 条
- 1
- 2
资源评论
不死鸟.亚历山大.狼崽子
- 粉丝: 5818
- 资源: 34
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功