springboot实现黑名单和白名单功能

题外话

       关于黑名单和白名单功能,我觉得可以直接用linux服务器的iptables或nftables来实现黑名单和白名单功能。这两个工具都是Linux系统上用于配置防火墙规则的命令行工具。

  1. iptables:

    • 描述: iptables 是一个用于配置IPv4数据包过滤规则的工具。它是Linux系统上最常用的防火墙工具之一。
    • 命令示例:
      • 添加黑名单规则:sudo iptables -A INPUT -s <黑名单IP地址> -j DROP
      • 添加白名单规则:sudo iptables -A INPUT -s <白名单IP地址> -j ACCEPT
  2. nftables:

    • 描述: nftables 是一个用于配置网络过滤和分类规则的框架,可以替代iptables。它支持IPv4和IPv6,并提供更灵活的语法。
    • 命令示例:
      • 添加黑名单规则:sudo nft add rule ip filter input ip saddr <黑名单IP地址> drop
      • 添加白名单规则:sudo nft add rule ip filter input ip saddr <白名单IP地址> accept

       在选择使用哪个工具时,您可以根据您的偏好以及系统是否已经采用nftables来进行选择。新er版本的Linux系统通常更倾向于使用nftables。请注意,上述命令中的<黑名单IP地址><白名单IP地址>需要替换为实际的IP地址。

       无论您选择使用iptables还是nftables,都需要小心配置规则,以确保不会阻止您访问服务器。在配置之前,请确保您了解防火墙规则的工作原理和影响。

       或者像openai一样使用cf防护也就是CloudFlare作为其服务的安全防护层。

这里就不讲那么多题外话,开始我们的springboot实现黑名单和白名单功能

先讲一下springboot实现黑白名单的原理,很简单,就是单纯的实现filter,然后注册到springboot里面,在filter里面进行黑白名单的筛选

第一步:创建一个springboot项目

pom文件的依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

注意:由于我使用的是springboot3,它内置的tomcat是10及其以上的。所以引入的依赖是jakarta,可能你们版本比较低的,可以使用javax

第二步:创建一个过滤器类

package org.cyl.test.fliter;
import jakarta.servlet.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;public class BlackWhiteListFilter implements Filter {private List<String> blackList = Arrays.asList("blocked-ip1", "blocked-ip2");private List<String> whiteList = Arrays.asList("127.0.0.1", "0:0:0:0:0:0:0:1");@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {String clientIP = request.getRemoteAddr();// 检查黑名单if (blackList.contains(clientIP)) {response.getWriter().write("Your IP is blacklisted.");return;}// 检查白名单if (!whiteList.contains(clientIP)) {response.getWriter().write("Your IP is not whitelisted.");return;}chain.doFilter(request, response);}// 可以实现 init 和 destroy 方法,根据需要进行处理
}

第三步:注册config类:

package org.cyl.test.config;
import org.cyl.test.fliter.BlackWhiteListFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class WebConfig {@Beanpublic FilterRegistrationBean<BlackWhiteListFilter> myFilter() {FilterRegistrationBean<BlackWhiteListFilter> registrationBean = new FilterRegistrationBean<>();registrationBean.setFilter(new BlackWhiteListFilter());registrationBean.addUrlPatterns("/*");return registrationBean;}
}

第四步:开始测试

在这里面编写白名单和黑名单。由于每次请求都会经过Filter,所以在这里面可以实现除了我设置的127.0.0.1和0:0:0:0:0:0:0:1之外,其他ip无法访问的情况。

编写controller类

package org.cyl.test.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/allowed-endpoint")public String sayHello(){return "Hello";}
}

访问localhost:8080/allowed-endpoint

结果如下:

修改白名单

再次访问:

很简单就成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/345512.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS讲解并演示 animateTo 动画效果

本文 我们一起看一看动画 首先 harmonyos中的东西 其实就是通过改变 响应式数据的值 以及配合动画参数 即可完成 我们先来看 布局更新动画 中的 显示动画 简单说 触发事件 改变组件的位置信息 我们先编写代码如下 Entry Component struct Index {State itemAlign: Horizont…

基于JAVA的数据可视化的智慧河南大屏 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏&#xff0c;包含了GDP、…

2024.1.13每日一题

LeetCode 2182.构造限制重复的字符串 2182. 构造限制重复的字符串 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串 s 和一个整数 repeatLimit &#xff0c;用 s 中的字符构造一个新字符串 repeatLimitedString &#xff0c;使任何字母 连续 出现的次数都…

分享几种msvcr120.dll丢失的解决方案,以及在修复过程中的注意事项

相信大家对于dll文件现在应该不陌生了吧&#xff1f;毕竟只要是有经常使用电脑的人&#xff0c;总会遇到dll文件丢失&#xff0c;如msvcr120.dll文件丢失&#xff0c;无法启动程序等等&#xff0c;其实遇到这些情况要解决&#xff0c;是不难的&#xff0c;难的是看你有没有准确…

WebDav协议相关软件@简单配置局域网内的http和WebDav服务器和传输系统

文章目录 相关软件windows自带第三方软件 chfs(CuteHttpFileServer)下载软件GUI方案 补充命令行方案命令行程序定位简单创建服务站点使用配置文件配置细节 使用软连接或符号链接等手段将向共享站点的根目录添加文件开机自启服务包装nssm包装使用powershell包装 服务启动chfs服务…

C++力扣题目530--二叉搜索树的最小绝对值

给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1示例 2&#xff1a; 输入&#xff1a;root […

Zabbix6.0全套落地方案-基于RHEL9系列源码编译安装-Linux+Nginx+Mysql+Redis生产级模板及Agent2客户端一键部署

实践说明&#xff1a;基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)&#xff0c;但适用场景不限于此&#xff0c;客户端一键部署安装包基于RHEL8和RHEL9。 文档形成时期&#xff1a;2023年 因系统或软件版本不同&#xff0c;构建部署可能略有差异&#xff0c;但本文未做细分…

Logstash配置详解

一、配置文件 Logstash配置文件位于Logstash安装目录下bin/logstash.conf 启动命令: logstash -f logstash.conf文件描述logstash.yml配置Logstash的yml。pipelines.yml包含在单个Logstash实例中运行多个管道的框架和说明。jvm.options配置Logstash的JVM&#xff0c;使用此文…

微信小程序快速入门02(含案例)

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、页面导航1.…

128基于matlab的粒子群优化算法寻找多元函数的最大值

基于matlab的粒子群优化算法寻找多元函数的最大值&#xff0c;可定义多元函数&#xff0c;变量区间范围&#xff0c;输出最大值条件下的变量值。程序已调通&#xff0c;可直接运行。 128matlab多元函数极值 (xiaohongshu.com)

Spring Boot 接入 KMS 托管中间件密码第三方接口密钥

1. 需求 Nacos中关于中间件的密码&#xff0c;还有第三方API的密钥等信息&#xff0c;都是明文存储&#xff0c;不符合系统安全要求。现需对这些信息进行加密处理&#xff0c;Nacos只存储密文&#xff0c;并在服务启动时&#xff0c;调用云厂商的KMS接口进行解密&#xff0c;将…

二分搜索边界问题的简单结论

引言 二分搜索是一个说简单也很简单&#xff08;代码很固定&#xff0c;也没几行&#xff09;&#xff0c;说难也很难&#xff08;边界问题可能会让人想不太清楚&#xff09;。 事实上&#xff0c;边界问题也是是算法题中普遍存在的难点。 这篇文章讲两个简单的结论&#xff0…