springboot中的请求过滤filter与拦截interceptor分析

本文主要是介绍springboot中的请求过滤filter与拦截interceptor分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先我们要定义一个类,实现标准的过滤器

在这里插入图片描述

import lombok.extern.slf4j.Slf4j;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
@Slf4j
public class AuthFilter implements Filter {@Override //初始化方法,只会被执行一次public void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);log.info("AuthFilter初始化");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("AuthFilter执行了");filterChain.doFilter(servletRequest, servletResponse); // 这里就是放行}@Override //销毁方法,只会被执行一次public void destroy() {Filter.super.destroy();log.info("AuthFilter销毁");}
}

由于filter是javaweb里面的类,不是spring里面自带的,所以我们还要在启动类上面加上注解

@ServletComponentScan // 扫描Servlet,javaweb里面的类
@SpringBootApplication
public class TliasWebManagementApplication {public static void main(String[] args) {SpringApplication.run(TliasWebManagementApplication.class, args);}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只拦截登录接口

@WebFilter("/login")
@Slf4j
public class AuthFilter implements Filter {@Override //初始化方法,只会被执行一次public void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);log.info("AuthFilter初始化");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("AuthFilter执行了");filterChain.doFilter(servletRequest, servletResponse);}@Override //销毁方法,只会被执行一次public void destroy() {Filter.super.destroy();log.info("AuthFilter销毁");}
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency>
package com.itheima.filter;
import com.alibaba.fastjson.JSONObject;
import com.itheima.pojo.Result;
import com.itheima.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebFilter("/*")
@Slf4j
public class AuthFilter implements Filter {@Override //初始化方法,只会被执行一次public void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);log.info("AuthFilter初始化");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//获取请求的urlHttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;String url = request.getRequestURL().toString();log.info("url:{}", url);//是否包含login,如果包含,则放行if (url.contains("login")) {log.info("登录操作,放行");filterChain.doFilter(servletRequest, servletResponse);return;}// 获取请求的tokenString token = request.getHeader("token");if (!StringUtils.hasLength(token)) {response.setStatus(401);log.info("token为空,请登录");Result error = Result.error("token not login");//在过滤器中,手动将结果输出到前端String notLogin = JSONObject.toJSONString(error);response.getWriter().write(notLogin);return;}// 解析tokentry {JwtUtils.parseJWT(token);} catch (Exception e) {e.printStackTrace();log.info("token解析失败");Result error = Result.error("not token");//在过滤器中,手动将结果输出到前端String notLogin = JSONObject.toJSONString(error);response.getWriter().write(notLogin);return;}// 放行filterChain.doFilter(servletRequest, servletResponse);}@Override //销毁方法,只会被执行一次public void destroy() {Filter.super.destroy();log.info("AuthFilter销毁");}
}

测试效果,没有登录,其他请求的返回
在这里插入图片描述

这篇关于springboot中的请求过滤filter与拦截interceptor分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134242

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499