拉黑 IP
在某些场景下,我们可能需要拉黑某些 IP 地址,以防止其访问我们的服务器。本文将演示如何在 Tio-Boot 中通过简单的代码实现 IP 拉黑功能。
代码实现
以下是一个基于 Tio-Boot 的简单 IP 拉黑控制器的实现:
import com.litongjava.tio.boot.http.TioRequestContext;
import com.litongjava.tio.core.Tio;
import com.litongjava.tio.http.common.HttpRequest;
import com.litongjava.tio.http.common.HttpResponse;
import com.litongjava.tio.http.common.utils.HttpIpUtils;
import com.litongjava.annotation.RequestPath;
import lombok.extern.slf4j.Slf4j;
@RequestPath("/admin.php")
@Slf4j
public class BlackIpController {
@RequestPath
public HttpResponse index(HttpRequest request) {
// 获取请求的真实IP地址
String realIp = HttpIpUtils.getRealIp(request);
log.info("blackIp:{}", realIp);
// 将IP地址添加到黑名单中
Tio.IpBlacklist.add(realIp);
// 返回响应
return TioRequestContext.getResponse();
}
}
代码说明
获取真实 IP 地址: 使用
HttpIpUtils.getRealIp(request)
获取客户端的真实 IP 地址。这里我们使用了HttpIpUtils
工具类来获取客户端的真实 IP 地址。日志记录: 使用
log.info
记录被拉黑的 IP 地址,以便调试和跟踪。添加到黑名单: 只需要一行代码
Tio.IpBlacklist.add(realIp);
就可以将该 IP 添加到黑名单中。返回响应: 通过
TioRequestContext.getResponse()
返回响应。
日志输出
在添加 IP 到黑名单后,你可以在日志中看到以下信息:
2024-08-25 12:09:43.007 [tio-group-5] INFO c.l.t.a.c.BlackIpController.index:19 - blackIp:0:0:0:0:0:0:0:1
2024-08-25 12:09:43.011 [tio-group-5] INFO c.l.t.c.Tio.send:1168 - can't send data, server:0.0.0.0:10002, client:$UNKNOWN:2, isClosed:true, isRemoved:true
2024-08-25 12:09:43.011 [tio-group-5] INFO c.l.t.c.u.TioUtils.checkBeforeIO:37 - server:0.0.0.0:10002, client:$UNKNOWN:2, isopen:false, isClosed:true, isRemoved:true
2024-08-25 12:09:54.654 [tio-group-6] INFO c.l.t.s.AcceptCompletionHandler.completed:53 - 0:0:0:0:0:0:0:1在黑名单中, tio-boot
2024-08-25 12:09:54.654 [tio-group-7] INFO c.l.t.s.AcceptCompletionHandler.completed:53 - 0:0:0:0:0:0:0:1在黑名单中, tio-boot
从上述日志中可以看到,IP 0:0:0:0:0:0:0:1
已经成功被添加到黑名单中,后续的访问请求将被拒绝。
总结
通过简单的几行代码,我们便能够在 Tio-Boot 中实现 IP 拉黑的功能。这对于提升系统的安全性、预防恶意攻击等场景非常实用。如果你在使用 Tio-Boot 开发过程中需要对特定 IP 进行限制,不妨试试这段代码。