当前位置:网站首页>Filter 过滤器
Filter 过滤器
2022-07-24 06:29:00 【SJMP1974】
参考:https://www.bilibili.com/video/BV1Y7411K7zz?p=293&vd_source=09e3f81b9f7ed8ee4306bb2e0ecd5538
一、什么是 Filter 过滤器?
1、Filter 过滤器它是JavaWeb 的三大组件之一,分别是:Servlet 程序、Listener 监听器、Filter 过滤器。
2、Filter 过滤器它是JavaEE 的规范,也就是接口。
3、Filter 过滤器它的作用是:拦截请求,过滤响应。
拦截请求常见的应用场景有:
1、权限检查
2、日记操作
3、事务管理
……
二、如何使用 Filter
2.1 写一个 Filter 类,并标识 @WebFilter注解
package com.atguigu.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/** * @author: sjmp1573 * @date: 2022/7/23 21:23 * @description: */
@WebFilter
public class AdminFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();
if (session.getAttribute("user") == null) {
request.getRequestDispatcher("/login.html").forward(request, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
2.2 在web-xml 中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>AdminFilter</filter-name>
<filter-class>com.atguigu.filter.AdminFilter</filter-class>
<init-param>
<param-name>book1</param-name>
<param-value>book1</param-value>
</init-param>
<init-param>
<param-name>book2</param-name>
<param-value>book2</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<url-pattern>/admin/*</url-pattern> </filter-mapping> </web-app> 2.3 编写一个登录权限校验是Servlet
package com.atguigu.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/** * @author: sjmp1573 * @date: 2022/7/23 22:30 * @description: */
@WebServlet(name = "adminServlet", value = "/adminServlet")
public class AdminServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
HttpSession session = req.getSession();
if (username.equals("admin") && password.equals("admin")) {
if (session.getAttribute("user") == null) {
// 请求参数 == null ,说明是第一次登录
session.setAttribute("user",username);
}
resp.getWriter().write("ok!!!");
} else {
req.getRequestDispatcher("login.html").forward(req, resp);
}
}
}
三、Filter 的生命周期
Filter 的生命周期包含几个方法
1、构造器方法
2、init 初始化方法
第1,2 步,在web 工程启动的时候执行(Filter 已经创建)
3、doFilter 过滤方法
第3 步,每次拦截到请求,就会执行
4、destroy 销毁
第4 步,停止web 工程的时候,就会执行(停止web 工程,也会销毁Filter 过滤器)
四、FilterConfig 类
FilterConfig 类见名知义,它是Filter 过滤器的配置文件类。
Tomcat 每次创建Filter 的时候,也会同时创建一个FilterConfig 类,这里包含了Filter 配置文件的配置信息。
FilterConfig 类的作用是获取filter 过滤器的配置内容
1、获取Filter 的名称filter-name 的内容
2、获取在Filter 中配置的init-param 初始化参数
3、获取ServletContext 对象
五、FilterChain 过滤器链

六、Filter 的拦截路径
精确匹配
<url-pattern>/target.jsp</url-pattern>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp目录匹配
<url-pattern>/admin/*</url-pattern>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*后缀名匹配
<url-pattern>*.html</url-pattern>
以上配置的路径,表示请求地址必须以.html 结尾才会拦截到
Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!!
边栏推荐
- Use the root user to create a new user and set the password for
- avaScript的流程控制语句
- mysql自动生成创建时间和更新时间
- SPI——发送16位和8位数据
- 【方向盘】IDEA的代码审查能力,来保证代码质量
- Prediction of advertising investment and sales based on regression analysis -- K neighborhood, decision tree, random forest, linear regression, ridge regression
- MySql的DDL和DML和DQL的基本语法
- 《大厂面试》之JVM篇21问与答
- 不去和谁比较,只需做好自己
- PyTorch 深度学习实践 第10讲/作业(Basic CNN)
猜你喜欢

在线问题反馈模块实战(十二):实现图片删除功能

Redis 主从机制

Metaltc5.0 realizes webrtc version IPC of Junzheng pure C

一个怎样的模式能让平台用户发生自助裂变?-链动2+1

C language from entry to Earth - array

一日一书:机器学习及实践——从零开始通往kaggle竞赛之路

Jinan renshe has signed 1w+ electronic labor contract, which greatly helps HR digitalization

Create WPF project

C language to achieve three chess? Gobang? No, it's n-chess

Redis distributed cache learning notes
随机推荐
UE4/5 无法打开文件“xxx.generated.h”(Cannot open file xxx.generated.h)的解决方法总结
tensorflow scatter_ Nd function
Empty cup mentality, start again
Love yourself first, then others.
Talk about your thoughts about the future
C process running permission
An AI plays 41 games, and the comprehensive performance score of Google's latest multi game decision transformer is twice that of dqn
[essays: discretization]
[C language] operator details (in-depth understanding + sorting and classification)
STM32基于hal库的adc以DMA的多通道采样以及所遇问题解决
【行测】图形找规律类题目
Geek planet ByteDance one stop data governance solution and platform architecture
lambda表达式对list对象进行多字段排序
ADB interaction - kill the ugly default shell interface
avaScript的流程控制语句
STM32 external interrupt (register version)
Redis distributed cache learning notes
Three level classification / menu query tree structure
电子商务时代,企业社交电商转型要做什么?
处理树形结构数据