当前位置: 首页 > news >正文

扁平化网站登录界面人工智能的关键词

扁平化网站登录界面,人工智能的关键词,最好的dm单网站建设,搭建网站需要什么工具点击下载《Java Spring Boot实现基于URL IP访问频率限制(源代码)》 1. 引言 在现代 Web 应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段。为了保护系统资源,防止服务器过载或服务不可用,需要对接口的访问频率进行限制。本文将介绍如…

点击下载《Java Spring Boot实现基于URL + IP访问频率限制(源代码)》

1. 引言

在现代 Web 应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段。为了保护系统资源,防止服务器过载或服务不可用,需要对接口的访问频率进行限制。本文将介绍如何使用 Spring Boot 实现基于 URL 和 IP 的访问频率限制,具体步骤包括:

  1. 使用拦截器拦截请求:在每个请求到达控制器之前进行拦截。

  2. 使用 Redis 存储访问记录:利用 Redis 的高性能特性来存储每个 IP 对每个 URL 的访问次数。

  3. 检测访问频率:判断 IP 在一定时间内对特定 URL 的访问次数是否超过限制。

  4. 禁用恶意 IP:如果超过限制,则将 IP 列入黑名单,禁止其后续访问。

2. 项目依赖

首先,在 pom.xml 中添加必要的依赖,包括 Spring Boot Web、Spring Boot Starter Data Redis 和 Lombok(用于简化代码)。

<!-- Spring Boot Starter Data Redis -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>3.4.1</version>
</dependency><!-- Lombok (可选,用于简化代码) -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

3. 配置 Redis

application.properties 中配置 Redis 连接信息:

server.port=8080
# Redis 配置
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.database=0
# 可选:设置密码
# spring.data.redis.password=yourpassword

或在 application.yml 中配置Redis连接信息:

server:port: 8080spring:application:name: urlInterceptorDemodata:# redis 配置redis:# 地址host: 127.0.0.1# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码password: "123456"# 连接超时时间timeout: 10s

4. 创建拦截器

创建一个拦截器 RateLimitInterceptor,用于拦截每个请求并执行访问频率限制逻辑。

package com.yyqq.urlinterceptordemo.Interceptor;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import java.util.concurrent.TimeUnit;@Component
public class RateLimitInterceptor implements HandlerInterceptor {@Autowiredpublic RedisTemplate redisTemplate;// 访问频率限制:每个 IP 每个 URL 最多访问 100 次 / 分钟private static final int MAX_REQUESTS = 10;private static final int TIME_WINDOW = 60; // 秒@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String ip = getClientIP(request);String url = request.getRequestURI();String key = "rate_limit:" + url + ":" + ip;long count = redisTemplate.opsForValue().increment(key, 1);if (count == 1) {// 设置键的过期时间为 TIME_WINDOW 秒redisTemplate.expire(key, TIME_WINDOW, TimeUnit.SECONDS);}if (count > MAX_REQUESTS) {response.setStatus(HttpServletResponse.SC_FORBIDDEN);response.setContentType("text/html;charset=UTF-8");response.getWriter().write("请求过于频繁,请稍后再试。");return false;}return true;}private String getClientIP(HttpServletRequest request) {String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}return ip;}
}

代码说明

  • RedisTemplate:用于与 Redis 进行交互。
  • MAX_REQUESTS 和 TIME_WINDOW:定义每个 IP 在每个 URL 上的最大访问次数和时间窗口(60 秒)。
  • preHandle 方法
    • 获取客户端 IP 和请求的 URL。
    • 构建 Redis 键,例如 rate_limit:/api/data:192.168.1.1
    • 使用 increment 方法对键进行递增,并设置过期时间。
    • 如果访问次数超过 MAX_REQUESTS,则返回 403 状态码,并返回错误信息。
  • getClientIP 方法:获取客户端的真实 IP,处理代理和负载均衡的情况。

5. 注册拦截器

创建一个配置类 WebConfig,将拦截器注册到 Spring MVC 中。

package com.yyqq.urlinterceptordemo.config;import com.yyqq.urlinterceptordemo.Interceptor.RateLimitInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate RateLimitInterceptor rateLimitInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(rateLimitInterceptor).addPathPatterns("/**") // 拦截所有路径.excludePathPatterns("/error"); // 排除错误路径}
}

代码说明

  • addInterceptors 方法:将自定义的拦截器添加到拦截器链中,并指定拦截的路径模式。
  • addPathPatterns("/")**:拦截所有路径。
  • excludePathPatterns(“/error”):排除错误路径,避免拦截器影响错误处理。

6. 创建控制器

创建一个简单的控制器 DemoController,包含一个示例接口用于测试。

package com.yyqq.urlinterceptordemo.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/test")
public class DemoController {@GetMapping("/getData")public String getData() {return "这是数据接口,现在访问正常!";}
}

8. 测试

启动 Spring Boot 应用后,可以进行以下测试:

1.正常访问

  • 访问 http://localhost:8080/test/getData,应返回 “这是数据接口,现在访问正常!”。

  • 多次快速刷新,访问次数达到 10 次后,应返回 “请求过于频繁,请稍后再试。”,并返回 403 状态码。
    在这里插入图片描述

2.禁用 IP

  • 在达到限制后,等待一段时间(60 秒),再次访问应恢复正常。

    在这里插入图片描述

9. 总结

通过结合使用 Spring Boot 拦截器和 Redis,本文实现了一种基于 URL 和 IP 的访问频率限制机制。这种机制能够有效地防止接口被恶意刷新和暴力请求,保护系统资源,提高应用的安全性和稳定性。在实际应用中,可以根据具体需求调整访问频率限制的参数,如最大访问次数和时间窗口。此外,还可以结合其他安全措施,如 IP 黑名单、验证码等,进一步增强系统的防护能力。

点击下载《Java Spring Boot实现基于URL + IP访问频率限制(源代码)》

http://www.ds6.com.cn/news/50651.html

相关文章:

  • 惠州市+网站开发公司选择宁波seo优化公司
  • 哪个网站做团购要求低点qq引流推广平台
  • uc浏览器官网宁波seo外包哪个品牌好
  • 做微信大转盘有哪些网站百度搜索词热度查询
  • wordpress autoseo网站平台
  • php简易企业网站源码做外贸网站的公司
  • 响应式手机网站怎么做当前疫情十大热点
  • 微幼儿园网站制作北京百度推广投诉电话
  • 深圳外贸网站开发建设it学校培训学校哪个好
  • html5简易网站建设白嫖永久服务器
  • 代做设计网站好网络营销环境宏观微观分析
  • 网站robots怎么做国际网站平台有哪些
  • 使用h5做的学习网站源码seo系统培训哪家好
  • 网上做网站推广骗局泰安优化关键词排名哪家合适
  • 动力风网站建设及软件开发合同互联网推广渠道
  • 对外网站建设情况汇报合肥网络公司seo
  • 网站版权问题吴江网站制作
  • 做网站搭建和微信平台推广网站建设流程图
  • b站做简介的网站汕头seo管理
  • 先做网站还是先收集样品优化网站排名茂名厂商
  • 宜州做网站网站建网站建设网站
  • 咸阳学校网站建设报价seo培训赚钱
  • 广州番禺营销型网站建设常用的网络推广方法
  • b2b网站都有哪些微信视频号小店
  • 网站做压测今天有什么新闻
  • 地下城钓鱼网站如何做做电商如何起步
  • 临朐网站制作企业线上培训平台有哪些
  • 电商网站商品表设计方案交换神器
  • 凡客官网 电脑版东莞百度网站排名优化
  • 西安网站设计培训试听十大跨境电商erp排名