详解JavaWeb中的过滤器Filter

网友投稿 330 2022-10-24


详解JavaWeb中的过滤器Filter

一、什么是过滤器

1.Filter过滤器的作用:拦截请求

2.拦截请求常见场景:

(1)权限检查

(2)日记操作

(3)事务管理

1.1 使用步骤

Filter 过滤器的使用步骤:

1、编写一个类去实现Filter 接口

2、实现过滤方法doFilter()

3、到web.xml 中去配置Filter 的拦截路径

二、初体验

web工程下新建一个admin目录,作为需要权限才能访问的目录,其中有两个文件

2.1 mynav.html

百度

Google

必应

2.2 FilterServlet程序

package com.filter.filter;

import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import java.io.IOException;

/**

* @author ningqian

* @create -05-16 20:17

*/

//注意导包是javax

public class FilterServlet implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

System.out.println("来到Filter过滤器");

HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;

HttpSession session = httpServletRequest.getSession();

//如果session的属性user为空,转发到首页

if(session.getAttribute("user")==null){

servletRequest.getRequestDispatcher("/index.jsp").forward(servletRequest,servletResponse);

}

else{//如果session的属性user不为空,则放行

filterChain.doFilter(servletRequest,servletResponse);

}

}

@Override

public void destroy() {

}

}

2.3 HelloServlet程序

package com.filter.filter;

import java.io.*;

import javax.servlet.http.*;

import javax.servlet.annotation.*;

@WebServlet(name = "helloServlet", value = "/hello-servlet")

public class HelloServlet extends HttpServlet {

private String message;

public void init() {

message = "Hello World!";

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

response.setContentType("text/html");

// Hello

PrintWriter out = response.getWriter();

out.println("

out.println("

out.println("");

HttpSession session = request.getSession();

session.setAttribute("user","ningqian");

}

public void destroy() {

}

}

2.4 web.xml

xmlns:xsi="http://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">

FilterServlet

com.filter.filter.FilterServlet

FilterServlet

/admin/*

HelloServlet

com.filter.filter.HelloServlet

HelloServlet

/hello</url-pattern>

xmlns:xsi="http://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">

FilterServlet

com.filter.filter.FilterServlet

FilterServlet

/admin/*

HelloServlet

com.filter.filter.HelloServlet

HelloServlet

/hello</url-pattern>

2.5 index.jsp

xmlns:xsi="http://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">

FilterServlet

com.filter.filter.FilterServlet

FilterServlet

/admin/*

HelloServlet

com.filter.filter.HelloServlet

HelloServlet

/hello

xmlns:xsi="http://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">

FilterServlet

com.filter.filter.FilterServlet

FilterServlet

/admin/*

HelloServlet

com.filter.filter.HelloServlet

HelloServlet

/hello

三、测试

1.启动服务器

2.在浏览器地址栏输入:http:localhost:8080/filter/admin/1.jpg

表示直接访问admin目录下的图片

由于此目录下的文件在web.xml中配置为受限,所以此时请求被FilterServlet收到,使用doFilter方法进行请求过滤检查,发现会话session中没有user属性,所以将该请求转发到index.jsp

3.在浏览器地址栏输入:http:localhost:8080/filter/

首页不在受限的目录下,所以可以直接访问,点击页面上的链接Hello Servlet,此时,将请求发到服务器,HelloServlet程序接收,通过doGet()方法,给会话session的user赋值

4.再次在浏览器输入:http:localhost:8080/filter/admin/1.jpg,此时就可以正常访问。

四、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 的内容:filterConfig.getFilterName()

2、获取在Filter 中配置的init-param 初始化参数(在web.xml中配置):filterConfig.getInitParameter(“username”)

3、获取ServletContext 对象:filterConfig.getServletContext()

AdminFilter

com.atguigu.filter.AdminFilter

username

root

url

jdbc:mysql://localhost3306/test

六、FilterChain过滤器链

多个过滤器

七、Filter 的拦截路径

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

八、精确匹配

8.1 目录匹配

/admin/*

8.2 后缀名匹配

*.html


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:计算机网络概述上
下一篇:好系统U盘启动教大家win10系统无管理员权限运行软件
相关文章

 发表评论

评论列表