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

一、过滤器

过滤器(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); //放行
        }
    }
}

四、效果

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JSP(JavaServer Pages)是一种服务器端的网页技术,常用于动态网页开发。创建一个银黑色框架的登录注册页面,你可以按照以下步骤进行: 1. **布局设计**: 使用HTML、CSS和JSP结合,你可以创建一个基础的银黑色框架。CSS可以定义页面的颜色和布局,如背景色、边框、字体等。例如,银色可以搭配深灰色的边框和白色文字。 ```html <!-- JSP头部开始 --> <head> <style> body { background-color: #2d2d2d; color: #ffffff; font-family: Arial, sans-serif; } .container { border: 1px solid #666666; border-radius: 5px; padding: 20px; margin: 100px auto; max-width: 400px; } </style> </head> <!-- JSP头部结束 --> <!-- JSP主体开始 --> <body> <div class="container"> <!-- 登录/注册表单内容 --> </div> </body> <!-- JSP主体结束 --> ``` 2. **表单元素**: 在`.container`中添加登录和注册表单的输入字段,包括用户名、密码、邮箱/手机号和提交按钮。 ```jsp <form action="process.jsp" method="post"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required><br> <label for="password">密码:</label> <input type="password" id="password" name="password" required><br> <!-- 其他字段... --> <input type="submit" value="登录/注册"> </form> ``` 3. **后端处理**: 创建一个名为`process.jsp`的后端JSP文件,用于接收用户输入并进行验证或存储数据。这通常涉及到服务器端编程,比如使用Java Servlets或Spring MVC框架。 4. **安全性**: 确保对用户输入进行适当的验证和清理,防止SQL注入或XSS攻击。对于密码,通常会进行哈希加密存储。 相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中杯可乐多加冰

请我喝杯可乐吧,我会多加冰!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值