0
点赞
收藏
分享

微信扫一扫

Filter过滤器

梦为马 2022-02-05 阅读 112

Filter过滤器

什么是Filter过滤器

  1. Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
  2. Filter 过滤器它是 JavaEE 的规范。也就是接口
  3. Filter 过滤器它的作用是:拦截请求,过滤响应。

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

  1. 权限检查

  2. 日记操作

  3. 事务管理

    ……等等

Filter的使用

要求:在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、等等)都必须是用户登录之后才允许访问。

在这里插入图片描述

Filter 的代码:

public class AdminFilter implements Filter {
/**
* doFilter 方法,专门用于拦截请求。可以做权限检查
*/
@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);
}
}

}

web.xml 中的配置:

<!--filter 标签用于配置一个Filter 过滤器-->
<filter>
<!--给filter 起一个别名-->
<filter-name>AdminFilter</filter-name>
<!--配置filter 的全类名-->
<filter-class>com.atguigu.filter.AdminFilter</filter-class>
</filter>
<!--filter-mapping 配置Filter 过滤器的拦截路径-->
<filter-mapping>
<!--filter-name 表示当前的拦截路径给哪个filter 使用-->
<filter-name>AdminFilter</filter-name>
<!--url-pattern 配置拦截路径
/ 表示请求地址为:http://ip:port/工程路径/ 映射到IDEA 的 web 目录
/admin/* 表示请求地址为:http://ip:port/工程路径/admin/*
-->
<url-pattern>/admin/*</url-pattern>
</filter-mapping>

Filter 过滤器的使用步骤:

  1. 编写一个类去实现 Filter 接口
  2. 实现过滤方法 doFilter()
  3. 到 web.xml 中去配置 Filter 的拦截路径

Filter的生命周期

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

  1. 构造器方法

  2. init 初始化方法

    3.doFilter 过滤方法

4.destroy 销毁

FilterConfig类

它是 Filter 过滤器的配置文件类。

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

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

  1. 获取 Filter 的名称 filter-name 的内容
  2. 获取在 Filter 中配置的 init-param 初始化参数
  3. 获取 ServletContext 对象

java 代码:

@Override
public void init(FilterConfig filterConfig) throws ServletException { System.out.println("2.Filter 的 init(FilterConfig filterConfig)初始化");
//1、获取Filter 的名称 filter-name 的内容
System.out.println("filter-name 的值是:" + filterConfig.getFilterName());
//2、获取在web.xml 中配置的init-param 初始化参数
System.out.println("初始化参数 username 的值是:" + filterConfig.getInitParameter("username")); System.out.println("初始化参数 url 的值是:" + filterConfig.getInitParameter("url"));
//3、获取ServletContext 对象
System.out.println(filterConfig.getServletContext());
}

web.xml 配置:

<!--filter 标签用于配置一个Filter 过滤器-->
<filter>
<!--给filter 起一个别名-->
<filter-name>AdminFilter</filter-name>
<!--配置filter 的全类名-->
<filter-class>com.atguigu.filter.AdminFilter</filter-class>

<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>

<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost3306/test</param-value>
</init-param>

</filter>

FilterChain过滤器链

  • Filter 过滤器
  • Chain 链,链条
  • FilterChain 就是过滤器链(多个过滤器如何一起工作)

在这里插入图片描述

Filter的拦截路径

精确匹配

<**url-pattern**>/target.jsp</**url-pattern**>

目录匹配

<**url-pattern**>/admin/*</**url-pattern**>

后缀名匹配

<**url-pattern**>*.html</**url-pattern**>

<**url-pattern**>*.do</**url-pattern**>

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

举报

相关推荐

过滤器filter

过滤器-filter

【VUE】过滤器Filter

Vue过滤器filter

【笔记】过滤器filter

vue filter 过滤器

Filter过滤器《笔记》

Filter过滤器(超详细)

0 条评论