赞
踩
参考:https://www.bilibili.com/video/BV1Y7411K7zz?p=293&vd_source=09e3f81b9f7ed8ee4306bb2e0ecd5538
1、Filter 过滤器它是JavaWeb 的三大组件之一,分别是:Servlet 程序、Listener 监听器、Filter 过滤器。
2、Filter 过滤器它是JavaEE 的规范,也就是接口。
3、Filter 过滤器它的作用是:拦截请求,过滤响应。
拦截请求常见的应用场景有:
1、权限检查
2、日记操作
3、事务管理
……
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(); } }
<?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>
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 的生命周期包含几个方法
1、构造器方法
2、init 初始化方法
第1,2 步,在web 工程启动的时候执行(Filter 已经创建)
3、doFilter 过滤方法
第3 步,每次拦截到请求,就会执行
4、destroy 销毁
第4 步,停止web 工程的时候,就会执行(停止web 工程,也会销毁Filter 过滤器)
FilterConfig 类见名知义,它是Filter 过滤器的配置文件类。
Tomcat 每次创建Filter 的时候,也会同时创建一个FilterConfig 类,这里包含了Filter 配置文件的配置信息。
FilterConfig 类的作用是获取filter 过滤器的配置内容
1、获取Filter 的名称filter-name 的内容
2、获取在Filter 中配置的init-param 初始化参数
3、获取ServletContext 对象
精确匹配
<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 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。