Filter过滤器总结

news2024/10/6 8:31:42

文章目录

    • 1. Filter介绍
    • 2. Filter分析
      • 2.1 初始化使用
      • 2.2 @WebFilter 配置
      • 2.3 其他
    • 3. Filter应用
      • 3.1 筛选访问路径
      • 3.2 判断用户是否存在

1. Filter介绍

 介绍: Filter是过滤器,通常可以将请求的资源拦截下来从而实现一些补充操作。
在这里插入图片描述

2. Filter分析

2.1 初始化使用

1. 实现Filter接口 (import javax.servlet.Filter), 重写接口当中的方法
2. 使用 @WebFilter 注解声明这是一个过滤器
3. 启动类配置 @ServletComponentScan 去扫描servlet相关的注解
package com.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class FilterAccess implements Filter {
	@Override // 这是过滤器的初始化方法
	public void init(FilterConfig filterConfig) throws ServletException { }

	@Override // 这是过滤器销毁时执行的代码
	public void destroy() { }

	@Override // 这是最重要的(通常重写这个来进行访问前的相关操作)
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
	filterChain.doFilter(servletRequest, servletResponse); // 执行放行操作
	}
}

2.2 @WebFilter 配置

 a. 使用urlPattern配置过滤路径(可以省略)

@WebFilter(filterName = "过滤器名字", urlPatterns = "过滤路径")

  b. 拦截路径配置总结
在这里插入图片描述

2.3 其他

 a. 通常可以将ServletRequest强制转换为HttpServletRequest进行相关操作,且其底层实现类为RequesFacade(由tomcat创建web容器初始化的时候进行创建)
在这里插入图片描述

 b. 访问操作若合法则会先放行 – 访问资源 – 执行放行后的代码,可以通过设置request对放行前数据进行相关操作,使用response对放行后数据进行操作
在这里插入图片描述

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
	System.out.println("执行放行之前的相关逻辑操作");
	filterChain.doFilter(servletRequest, servletResponse); // 访问相关资源
	System.out.println("执行放行之后的相关逻辑操作");
}


 c. 过滤器链(若有多个过滤器,则按照过滤器的类名的自然排序进行逐个过滤)
在这里插入图片描述

3. Filter应用

3.1 筛选访问路径

  AntPathMatcher类:当中的match(合法路径,访问路径)方法–通常可以用于对资源访问路径的匹配工作
在这里插入图片描述

package com.filter;

import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter("/*")
public class FilterAccess implements Filter {
	public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();

	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest; // 强制转换为 HttpServletRequest

		boolean fg = false;
		String[] urls = new String[]{ // 存放放行资源: 通常将静态资源 + 登录退出访问请求进行直接放行
				"/employee/login",
				"/employee/logout",
				"/backend/**",
				"/front/**"
		};
		String requestURI = request.getRequestURI(); // 获取访问路径
		for(String url : urls) fg = fg | PATH_MATCHER.match(url, requestURI);

		if(fg) filterChain.doFilter(servletRequest, servletResponse); // 若是合法访问的路径资源 -- 允许访问
	}
}

3.2 判断用户是否存在

  通常都可以将Servletxxxx转为HttpServletxxxx进行强制转换操作,方便获取其session相关对象或进行其他相关操作。

package com.filter;

import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebFilter("/*")
public class FilterAccess implements Filter {
	public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();

	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;

		HttpSession session = request.getSession(); // 获取session对象
		Object x = session.getAttribute("username"); // 获取对应的键所对应的值
		if(x != null){ // 用户存在 -- 允许访问
			filterChain.doFilter(servletRequest, servletResponse);
		}
		else{ // 用户不存在, 不允许访问 -- 并且可以使用 response对象写回给前端不能访问的相关信息
			response.getWriter().write("用户不存在, 不允许访问");
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多地ping检测域名解析ip地址—js混淆对抗

多地ping检测域名解析ip地址—js混淆对抗 0x1 概述 由于项目需求,给出了n多条域名,需要获取其对应的ip地址。本文叙述了解决项目问题所使用的方法,且本文旨在研究js反混淆,请勿将所观所学用于非法操作,如有侵权&…

spring-bean的基础知识

1.bean的别名 2.bean的作用范围 单例多例&#xff0c;即现在创建的bean对象是一个还是多个&#xff0c;默认情况下是单例&#xff0c;可在配置文件修改 <bean scope"singleton/prototype"/> 适合单例的bean 1.表现层对象 2.业务层对象 3.数据层对象 4.工具对…

windows py项目部署到centos7上出现的问题

yolov5训练数据时&#xff0c;centos7系统无法访问github下载预训练模型方法&#xff1a;在自己的计算机中打开etc&#xff0c;找到hosts文件 将下面的命令添加到内容的末尾 # GitHub Start 140.82.113.3 github.com 140.82.114.20 gist.github.com 151.101.184.133 …

基于Java+vue前后端分离微博系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

17.待机唤醒

1.STM32待机模式介绍&#xff1a; &#xff08;1&#xff09;STM32低功耗模式介绍&#xff1a; STM32提供了3种低功耗模式&#xff0c;以达到不同层次的降低功耗的目的&#xff0c;三种模式如下所示&#xff1a; 睡眠模式(CM内核停止工作&#xff0c;外设仍在运行)&#xff…

【K8S系列】深入解析K8S监控

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记论点蓝色&#xff1a;用来标记论点 Kubernetes (k8s) 是一个容器编…

C语言学习(三十四)---动态内存常见错误总结

上节内容中&#xff0c;我们学习如何规范的申请和使用动态内存&#xff0c;其实是很重要的一环。 在大的程序中&#xff0c;应该注意这些细节问题&#xff0c;不然就会对其他的程序猿们产生影响&#xff0c;因为大的程序不可能交由一个人完成&#xff0c;所以&#xff0c;你编…

Slidev: 为开发者打造的演示文稿工具

非程序员开发者可以忽略&#xff0c;需要一定Markdown等知识要求。 官网地址&#xff1a;Slidev、开始使用 | Slidev 简介 Slidev (slide dev, /slʌɪdɪv/) 是基于 Web 的幻灯片制作和演示工具。它旨在让开发者专注在 Markdown 中编写内容&#xff0c;同时拥有支持 HTML 和…

二本4年测试经验,五面阿里(定薪35K),分享我的心得

6月跳槽&#xff0c;先后面试了多个大大小小的公司&#xff0c;拿了一些offer&#xff0c;有阿里&#xff0c;滴滴&#xff0c;快手&#xff0c;达达&#xff0c;得物等公司。面试的公司大部分都能过&#xff0c;所以这里给大家分享下自己的经验&#xff0c;也给自己做个归档&a…

2021年国赛高教杯数学建模E题中药材的鉴别解题全过程文档及程序

2021年国赛高教杯数学建模 E题 中药材的鉴别解题 原题再现 不同中药材表现的光谱特征差异较大&#xff0c;即使来自不同产地的同一药材&#xff0c;因其无机元素的化学成分、有机物等存在的差异性&#xff0c;在近红外、中红外光谱的照射下也会表现出不同的光谱特征&#xff…

软件工程-期末复习题

第1章软件工程概述 1、软件的概念及特点 概念&#xff1a; 计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序&#xff0c;运行过程中产生的各种结果&#xff0c;以及以硬复制和电子表格等多种方式存在的软…

ChatGPT 和爬虫有什么区别

目录 ChatGPT的概念和功能 爬虫的概念和功能 ChatGPT和爬虫的区别 ChatGPT的概念和功能 ChatGPT是一个基于自然语言处理和机器学习的智能对话模型&#xff0c;具有以下功能&#xff1a; 1. 问题回答&#xff1a;ChatGPT可以回答用户提出的各种问题。不论是有关常识、历史、科…

【数据结构】---TopK问题

本文提供用建堆来解决TopK问题的一个思路 N个数中找出最大的或者最小的前k个 假设现从N个数中找最大的前k个 ①堆排序&#xff0c;时间复杂度O(N*logN)&#xff0c;这N个数排一下序&#xff0c;前k个数就是需要的②建堆N个数的小堆&#xff0c;HeapPop 9次&#xff0c;就选出…

嵌入式工程师常见面试题(持续更新版本)

前言&#xff1a;鄙人于学堂求学十余载&#xff0c;终是要踏足江湖求一寸安身处&#xff01;以前都忙着学习新东西以及做项目&#xff0c;现如今也需要面对找工作的压力。此篇博客是作者准备的嵌入式工程师常见的面试题目汇总&#xff0c;其答案包含网络搜索和作者自己感悟总结…

6月,视频号爆火的账号有哪些?

六月伊始&#xff0c;视频号就借着六一节点上线青少年内容分级功能&#xff0c;让视频号内容及安全管理更精细化。紧接着开展了“特效大拍档”招募活动&#xff0c;激励各垂类头部创作者持续活跃&#xff0c;与他们共建更丰富健康的内容生态。在官方各种活动激励之下&#xff0…

Python语法基础07(文件与异常)

文件 输出文件中的内容 在项目代码同路径下创建一个pi_digits文件 3.14159265358979323846在fileDemo0.py中将其打开&#xff0c;并输出 #用函数open()打开文件&#xff0c;并将对象赋给file,对于open中的文件路径&#xff0c;可以使用相对路径也可以使用绝对路径 with ope…

2023年淘宝天猫内部大额隐藏粉丝福利购店铺优惠券领取入口在哪里怎么找到免费领取淘宝天猫优惠券?

草柴优惠券APP应用市场下载入口 草柴优惠券APP已上架的应用市场&#xff1a;华为应用市场、小米应用市场、OPPO应用市场、VIVO应用市场及百度手机助手&#xff0c;请打开以上应用市场搜索&#xff1a;草柴优惠券&#xff0c;即可下载通过应用市场审核验证通过的安全可信应用&a…

JavaWeb Cookie

1.Cookie 介绍 Cookie是一种用于在Web浏览器和Web服务器之间传递数据的机制。 它是由服务器发送给浏览器的小型文本文件&#xff0c;存储在浏览器的本地计算机上。 浏览器在后续请求中会自动将Cookie发送回服务器&#xff0c;以便服务器可以识别用户并提供个性化的服务。 C…

涨知识,周鸿伟当年踩的坑,如果用这么一个工具就能事半功倍

怎么让员工有效率地工作&#xff1f;如何考核员工&#xff1f;如何让员工有积极的心态&#xff1f;公司的汇报体系应该怎么设计&#xff1f; 这些问题都让360创始人周鸿伟感到困惑&#xff01; 说到“红衣大炮”周鸿伟的本事&#xff0c;那真的不是吹&#xff01; 近期&…

github:网址为 https://github.com/ 的网页可能暂时无法连接,或者它已永久性地移动到了新网址

一、无法访问github 二、尝试ping gitlab.com 三、打开站长工具 查找 ip地址 “www.github.com”A记录/cname检测结果--Dns查询|dns查询--站长工具 四、打开host文件&#xff08;C:\Windows\System32\drivers\etc&#xff09; 20.205.243.166 github.com 五、再次ping github&…