当前位置: 首页 > news >正文

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销毁");}
}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何从硬盘恢复已删除/丢失的文件?硬盘恢复已删除的文件技巧
  • Windows下Python和PyCharm的应用(一)__第一个测试程序
  • linux 配置 iscsi 存储资源共享
  • 基于PI控制算法的异步感应电机转速控制系统simulink建模与仿真
  • 计算机网络 第二章: 物理层_信道复用技术
  • Linux_kernel移植uboot07
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor
  • 【MySQL进阶之路】数据库的操作
  • HarmonyOS Menu 组件使用详解
  • DNS故障怎么排查?
  • Sentence-BERT实现文本匹配【回归目标函数】
  • Linux学习~树莓派gpio控制(1)
  • Leetcode JAVA刷刷站(108)将有序数组转换为二叉搜索树
  • 基于SpringBoot+Vue+MySQL的的宠物商城网站
  • [C#] 基于 Token 的鉴权与签名机制详解 接口对接鉴权 token、sign(a=1b=2c=3d=4)、Base64、参数加密、MD5
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Facebook AccountKit 接入的坑点
  • IP路由与转发
  • JAVA多线程机制解析-volatilesynchronized
  • k个最大的数及变种小结
  • PHP 小技巧
  • SpringCloud集成分布式事务LCN (一)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何使用 JavaScript 解析 URL
  • 再谈express与koa的对比
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • # 安徽锐锋科技IDMS系统简介
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • $jQuery 重写Alert样式方法
  • (175)FPGA门控时钟技术
  • (4)(4.6) Triducer
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (七)Activiti-modeler中文支持
  • (七)glDrawArry绘制
  • (数据结构)顺序表的定义
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原)Matlab的svmtrain和svmclassify
  • (转)3D模板阴影原理
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net6使用WebSocket与前端进行通信
  • .NET与 java通用的3DES加密解密方法
  • @SentinelResource详解
  • []C/C++读取串口接收到的数据程序
  • [Android] Implementation vs API dependency
  • [ARC066F]Contest with Drinks Hard