广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解JavaWeb中的过滤器Filter
  • 379
分享到

详解JavaWeb中的过滤器Filter

2024-04-02 19:04:59 379人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录一、什么是过滤器1.1 使用步骤二、初体验2.1 mynav.html2.2 FilterServlet程序2.3 HelloServlet程序2.4 WEB.xml2.5 in

一、什么是过滤器

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

2.拦截请求常见场景:

(1)权限检查
(2)日记操作
(3)事务管理

在这里插入图片描述 

1.1 使用步骤

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

二、初体验

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

在这里插入图片描述

2.1 mynav.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>导航</title>
</head>
<body>
<table>
    <tr>
        <td>
            百度<input type="text">
        </td>
    </tr>
    <tr>
        <td>
            Google<input type="text">
        </td>
    </tr>
    <tr>
        <td>
            必应<input type="text">
        </td>
    </tr>
</table>
</body>
</html>

2.2 FilterServlet程序


package com.filter.filter;

import javax.servlet.*;
import javax.servlet.Http.httpservletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;


 //注意导包是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("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
        HttpSession session = request.getSession();
        session.setAttribute("user","ningqian");
    }

    public void destroy() {
    }
}

2.4 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>FilterServlet</filter-name>
        <filter-class>com.filter.filter.FilterServlet</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterServlet</filter-name>
         <!--表示受限的文件-->
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.filter.filter.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

2.5 index.jsp


<?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>FilterServlet</filter-name>
        <filter-class>com.filter.filter.FilterServlet</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterServlet</filter-name>
         <!--表示受限的文件-->
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.filter.filter.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

三、测试

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()


<!--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 的拦截路径

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

八、精确匹配

8.1 目录匹配


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

8.2 后缀名匹配


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

到此这篇关于详解javaweb中的过滤器Filter的文章就介绍到这了,更多相关JavaWeb Filter内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解JavaWeb中的过滤器Filter

本文链接: https://www.lsjlt.com/news/126142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作