快速入门springboot 网页开发(五)springboot控制器之过滤器、拦截器

过滤器

◼ 过滤器(Filter)可以动态地拦截请求和响应。
◼ 应用场景:过滤敏感词汇、防止SQL注入、设置字符编码、进行URL级
别的权限访问控制、压缩响应信息等。
在这里插入图片描述

过滤器编程步骤1:创建过滤器类

◼ 编写 Java 类实现 Filter 接口(主要是实现 doFilter() 方法);
◼ 过滤器类使用注解 @WebFilter 标注,并配置过滤 url。

在这里插入图片描述
Filter 接口的三个方法说明:
Filter随web应用的启动而启动, 只初始化一次, 随web应用的停止而销毁。

  1. 启动服务器时加载过滤器的实例,并调用 init() 方法来初始化实例;
  2. 每一次请求时都只调用 doFilter()方法进行处理;
  3. 停止服务器时调用 destroy() 方法,销毁实例

过滤器类基本代码框架

过滤器类基本代码框架
@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 黑名单

在这里插入图片描述

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@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); //放行
		}
	}
}

拦截器

◼ 拦截器(Interceptor)主要用于拦截用户请求并作相应的处理。
◼ 基于Java的反射机制,属于面向切面编程(AOP)的一种运用。
◼ 应用场景:验证用户登录状态、权限验证、记录系统日志、通用处理等。

拦截器编程步骤1:创建拦截器类

编写Java类实现 HandlerInterceptor 接口(主要实现 preHandle()方法)
在这里插入图片描述
HandlerInterceptor 接口的三个方法说明:
preHandle:在业务处理器处理请求之前被调用;
postHandle:在业务处理器处理请求执行完成后,生成视图之前执行;
afterCompletion:在DispatcherServlet完全处理完请求后被调用(渲染页面之后)。

在这里插入图片描述

拦截器类基本代码框架

public class MyInterceptor implements HandlerInterceptor {
//在处理请求之前被调用。可以进行权限校验、安全控制等处理;
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;
// 设置拦截的业务的条件
// return true; 放行(满足条件时放行,继续业务处理)
// return false; 拦截(不满足条件时,跳转到其他处理)
}

拦截器编程步骤2:创建拦截器配置类

◼ 编写Java类实现 WebMvcConfigurer 接口(主要实现 addInterceptors()
方法)
◼ 该类用注解 @Configuration 标注(表明是一个配置类)

拦截器配置类基本代码框架

@Configuration // 表明是一个配置类 不要掉了!
public class MyWebConfig implements WebMvcConfigurer {
	@Override
	public void addInterceptors(InterceptorRegistry registry) { //加载拦截器
		registry.addInterceptor( new MyInterceptor () ) //加载自定义的拦截器
		.addPathPatterns("/**") //拦截请求的路径 /** 表示所有请求
		.excludePathPatterns("/","/css/*","/images/*","/js/*"); //不拦截的请求,如首页、静态资源等
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

葛济维的博客

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值