0
点赞
收藏
分享

微信扫一扫

JavaWeb--快速入门Filter过滤器


Filter

  • ​​一、Filter 过滤​​
  • ​​1. Filter什么是过滤器​​
  • ​​2. Filter的初体验​​
  • ​​2.1 编写AdminFilter实现接口​​
  • ​​2.2在xml中配置访问路径​​
  • ​​2.3 打断点debug部署服务进行测试​​
  • ​​3. Filter的生命周期​​
  • ​​4. FilterConfig类​​
  • ​​5. FilterChain 过滤器链​​
  • ​​6. Filter的拦截路径​​
  • ​​精确匹配​​
  • ​​目录匹配​​
  • ​​后缀名匹配​​

一、Filter 过滤

1. Filter什么是过滤器

1、Filter过滤器它是JavaWeb的三大组件之一

三大组件分别是: Servlet 程序、Listener监听器、Filter过滤器

2、Filter过滤器它是JavaEE 的规范。也就是接口

3、Filter过滤器它的作用是:拦截请求,过滤响应

拦截请求常见的应用场景有:

​ 1、权限检查
​ 2、日记操作
​ 3、事务管理
​ ……等等

2. Filter的初体验

用户登录之后都会把用户登录的信息保存到Session域中。所以要检查用户是否登录,可以判断Session中是否包含有用户登录的信息即可!!!

<%--
Created by IntelliJ IDEA.
User: Jack
Date: 2022/1/3
Time: 9:08
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>

<%
Object user = session.getAttribute("user");

if (user == null){
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}
%>


</body>
</html>

JavaWeb--快速入门Filter过滤器_html

完整的体验

2.1 编写AdminFilter实现接口

package com.caq.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class AdminFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

/**
* 拦截请求,然后做权限检查
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpSession session = httpServletRequest.getSession();
Object user = session.getAttribute("user");
//如果等于null,说明没有登录
if (user == null) {
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest, servletResponse);
return;
} else {
//让程序继续往下访问用户的目标资源
filterChain.doFilter(servletRequest,servletResponse);
}
}

@Override
public void destroy() {

}
}

2.2在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">
<!-- fileter标签用于配置一个Filter过滤器 -->

<filter>
<filter-name>AdminFilter</filter-name>
<filter-class>com.caq.filter.AdminFilter</filter-class>
</filter>

<!-- filter过滤器的拦截路径-->
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<!-- url-pattern配置拦截路径-->
<!-- /表示请求地址为:http://ip:port/工程路径/ 映射到IDEA的web目录-->
<!-- /admin/* 表示请求地址为http://ip:port/工程路径/admin/*-->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>RegistServlet</servlet-name>
<servlet-class>com.caq.servlet.RegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistServlet</servlet-name>
<url-pattern>/registServlet</url-pattern>
</servlet-mapping>



<servlet>
<servlet-name>KaptchaServlet</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>KaptchaServlet</servlet-name>
<url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>







</web-app>

2.3 打断点debug部署服务进行测试

可以看到首先经过的是filter过滤器

JavaWeb--快速入门Filter过滤器_java_02

进行放行才会出现a.jsp的页面

JavaWeb--快速入门Filter过滤器_intellij-idea_03

3. Filter的生命周期

Filter的生命周期包含几个方法

1、构造器方法

​ 2、init初始化方法
​ 第1,2步,在 web工程启动的时候执行( Filter已经创建)

3、doFilter过滤方法

第3步,每次拦截到请求,就会执行

4、destroy销毁

第4步,停止 web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)

4. FilterConfig类

FilterConfig 类见名知义,它是Filter过滤器的配置文件类。

Tomcat每次创建Filter 的时候,也会同时创建一个FilterConfig类,这里包含了Filter配置文件的配置信息。

FilterConfig 类的作用是获取filter 过滤器的配置内容

1、获取Filter的名称filter-name 的内容

2、获取在 Filter 中配置的init-param初始化参数

3、获取ServletContext对象

5. FilterChain 过滤器链

FilterChain 就是过滤器链(多个过滤器如何一起工作)

JavaWeb--快速入门Filter过滤器_intellij-idea_04

6. 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结尾才会拦截到

<url-pattern>*.do</url-pattern>
表示请求地址必须以.do结尾才会拦截到

<url-pattern>*.action</url-pattern>
表示请求地址必须以.action结尾才会拦截到

Filter过滤器只关心请求地址是否匹配不关心资源是否存在


举报

相关推荐

JavaWeb-Filter过滤器

【后端】javaweb过滤器Filter

JavaWeb笔记(8):Filter过滤器

JavaWeb_09_Filter过滤器

【JavaWeb】Filter过滤器 的使用

过滤器filter

Filter过滤器

过滤器-filter

0 条评论