如何实现ip地址拉黑(过滤器类)

简介: 如何实现ip地址拉黑(过滤器类)

@TOC

一、过滤器

过滤器(Filter)可以动态地拦截请求和响应。

◼ 应用场景:过滤敏感词汇、防止SQL注入、设置字符编码、进行URL级

别的权限访问控制、压缩响应信息等。

在这里插入图片描述

二、过滤器编程步骤

1、创建过滤器类

编写 Java 类实现 Filter 接口(主要是实现 doFilter() 方法);

过滤器类使用注解 @WebFilter 标注,并配置过滤 url。

过滤器类基本代码框架:

@WebFilter("/*") // 当前配置拦截所有请求
public class MyFilter implements Filter {
@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
        if(某条件){
            //拦截处理
        }
        else{
        chain.doFilter(request, response); // 放行
        }
    }
}

2、加载过滤器

在 Spring Boot 启动类上添加 @ServletComponentScan 注解。

在这里插入图片描述

三、实战代码

本例 IP 黑名单以 127.0.0.1 和 localhost 为例:

以下请求均被过滤:

http://localhost:8080/

http://127.0.0.1:8080/

MyFilter.java

@ServletComponentScan
@WebFilter("/*")
public class MyFilter implements Filter {
    //黑名单 简单模拟一下
    private List<String> IPList=new ArrayList<>();
    @Override
    public void init(FilterConfig filterConfig) throws ServletException { //过滤器初始化
        IPList.add("127.0.0.1"); // 本机地址
        IPList.add("0:0:0:0:0:0:0:1"); // IPv6 的本机地址
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws
            IOException, ServletException {
//黑名单过滤
        String ip = servletRequest.getRemoteAddr(); // 获得客户端 ip 地址
        System.out.println(ip); //控制台上查看一下
        if( IPList.contains(ip) ){
            servletResponse.setContentType("text/html;charset=utf-8"); //设置响应的字符集(避免中文乱码)
            servletResponse.getWriter().println("你已被列入黑名单!");
        }
        else{
            filterChain.doFilter(servletRequest,servletResponse); //放行
        }
    }
}

四、效果

在这里插入图片描述

相关文章
|
8天前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
19 3
|
6月前
|
安全 Java 网络虚拟化
隐藏 IP 地址调用外部接口:探索与实践
隐藏 IP 地址调用外部接口:探索与实践
93 0
|
7月前
|
XML 前端开发 JavaScript
现代接口中的路由处理方式
【5月更文挑战第10天】本文介绍了FastAPI的路由和响应处理。它允许将查询参数如`skip`和`limit`用于URL,并自动进行类型转换和验证。路径装饰器允许配置操作,如添加元数据、响应模型和状态码。 介绍了使用通配符处理多种请求。I作为高性能接口框架的特点,还需根据需求评估其适用性。
125 10
现代接口中的路由处理方式
|
7月前
|
XML 前端开发 JavaScript
现代的接口路由处理方式
【5月更文挑战第14天】FastAPI允许绑定路由到路由组,处理查询参数,如`skip`和`limit`,支持默认值和可选参数。查询参数自动转换并校验类型。路径装饰器用于配置操作,如添加元数据、响应模型和状态码。 通配符(*)可用于允许所有源,但处理凭据时需谨慎。FastAPI提供高性能和灵活性,适合特定业务场景。
348 2
|
7月前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
292 11
|
7月前
|
安全 Python
全局代理IP的工作原理和实现方法
全局代理IP的工作原理和实现方法
136 7
|
7月前
|
负载均衡 网络协议 数据安全/隐私保护
详解配置代理和IP设置的含义
详解配置代理和IP设置的含义
|
7月前
|
数据挖掘 Python
如何将动态IP代理转换为静态IP代理的方法与步骤
如何将动态IP代理转换为静态IP代理的方法与步骤
413 6
|
7月前
|
安全 定位技术 数据安全/隐私保护
探究局部代理IP和全局代理IP的区别
探究局部代理IP和全局代理IP的区别
|
网络架构
探秘公有IP地址与私有IP地址的区别及其在路由控制中的作用
本文将深入探讨公有IP地址和私有IP地址的区别和作用,并介绍了在路由控制中如何使用IP地址来确定下一跳路由器。了解这些概念和技术将有助于读者更好地理解互联网通信的原理和过程。
216 1
探秘公有IP地址与私有IP地址的区别及其在路由控制中的作用