Java Filter过滤器的使用教程

目录
  • 一、过滤器的使用以及实现原理
    • 当前的oa项目还存在什么缺陷
    • Filter作用与执行原理
    • 过滤器怎么写
    • 过滤器的调用顺序
    • Filter的生命周期
  • 二、责任链设计模式改造oa项目

一、过滤器的使用以及实现原理

当前的oa项目还存在什么缺陷

①对于DeptServlet、EmpServlet、OrderServlet,每一个Servlet都是处理自己相关的业务;在这些Servlet执行之前都是需要判断用户是否登录了。如果用户登录了,可以继续操作,如果没有登录,需要用户登录。

②这段判断用户是否登录的代码是固定的,并且在每一个Servlet类当中都需要编写,显然代码没有得到重复利用。包括每一个Servlet都要解决中文乱码问题,也有公共的代码。这些代码目前都是重复编写,并没有达到复用。

③怎么解决这个问题?

可以使用Servlet规范中的Filter过滤器来解决这个问题。

Filter作用与执行原理

①Filter是过滤器。

②Filter可以在Servlet这个目标程序执行之前添加代码,也可以在目标Servlet执行之后添加代码;之前之后都可以添加过滤规则!

③一般情况下,都是在过滤器当中编写公共代码。

过滤器怎么写

(1)编写一个Java类实现javax.servlet.Filter接口,并且实现这个接口当中所有的方法;有三个方法:

①init方法:在Filter对象第一次被创建之后调用,并且只调用一次。

②doFilter方法:只要用户发送一次请求,则执行一次;发送N次请求,则执行N次。在这个方法中编写过滤规则!

③destroy方法:在Filter对象被释放/销毁之前调用,并且只调用一次。

package com.bjpowernode.javaweb.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
 * @Package:com.bjpowernode.javaweb.servlet
 * @Project:JavaWeb
 * @name:MyFilter
 */
public class MyFilter implements Filter {
    public MyFilter() {
        System.out.println("无参数构造方法执行");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init方法执行");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("Filter1 doFilter方法开始执行");
    }
    @Override
    public void destroy() {
        System.out.println("destroy方法执行");
    }
}

(2)在web.xml文件中对Filter进行配置,这个配置和Servlet很像。

或者使用注解:@WebFilter({"*.do"})

<?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>myfilter</filter-name>
        <filter-class>com.bjpowernode.javaweb.servlet.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myfilter</filter-name>
        <url-pattern>/a.do</url-pattern>
    </filter-mapping>
</web-app>

(3)打开服务器,无参构造方法和init方法都会执行;访问时doFilter方法才会执行。

①Servlet对象默认情况下,在服务器启动的时候是不会新建对象的。

②Filter对象默认情况下,在服务器启动的时候会新建对象,执行无参构造方法。

③Servlet是单例的,Filter也是单例的。

(4)编写两个类AServlet和BServlet继承HttpServlet,并且AServlet路径定义为/a.do(和上面一样),BServlet路径定义为/b.do

package com.bjpowernode.javaweb.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @Package:com.bjpowernode.javaweb.servlet
 * @Project:JavaWeb
 * @name:Aservlet
 */
@WebFilter("/a.do")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("AServlet中的doGet方法执行了。");
    }
}

BServlet类

package com.bjpowernode.javaweb.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @Package:com.bjpowernode.javaweb.servlet
 * @Project:JavaWeb
 * @name:BServlet
 */
@WebFilter("/b.do")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("BServlet中的doGet方法执行了。");
    }
}

发送请求:http://localhost:8080/servlet14/a.do发现只有过滤器MyFilter类中的doFilter方法执行了;而AServlet中的方法并没有执行:

(5)按理说我们发送http://localhost:8080/servlet14/a.doAservlet和MyFilter都会执行,因为路径都是/a.do ;实际上目标Servlet(Aservlet)是否执行,取决于两个条件:

①第一:在过滤器当中是否编写了:chain.doFilter(request, response); 代码。

②第二:用户发送的请求路径是否和Servlet的请求路径一致。

注意:chain.doFilter(request, response); 这行代码的作用:执行下一个过滤器,如果下面没有过滤器了,执行最终的Servlet。

注意:Filter的优先级,天生的就比Servlet优先级高。/a.do 对应一个Filter,也对应一个Servlet。那么一定是先执行Filter,然后再执行Servlet!

所以不妨重写一下doFilter方法,然后再次去访问:

package com.bjpowernode.javaweb.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
 * @Package:com.bjpowernode.javaweb.servlet
 * @Project:JavaWeb
 * @name:MyFilter
 */
public class MyFilter implements Filter {
    public MyFilter() {
        System.out.println("无参数构造方法执行");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init方法执行");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 在请求的时候添加过滤规则。
        System.out.println("Filter1 doFilter方法开始执行");
        // 执行下一个过滤器,如果下一个不是过滤器了,则执行目标程序Servlet
        // 简单理解就是向下走
        chain.doFilter(request,response);
        // 在响应的时候添加过滤规则。
        System.out.println("Filter1 doFilter方法执行结束。");
    }
    @Override
    public void destroy() {
        System.out.println("destroy方法执行");
    }
}

执行结果如下:

三句话都执行了,所以现在对于上面那个图就更加容易理解了:

①发送请求的时候,经过了过滤器;

②执行chain.doFilter(request, response); 执行下一个过滤器或者Servlet;

③进行响应也会经过过滤器;

补充:

①@WebFilter("/a.do") 精确匹配,只有发送a.do才会经过这个过滤器。

②@WebFilter({"/a.do", "/b.do"}) 匹配一个数组,发送a.do和b.do都可以经过这个过滤器。

③@WebFilter("*.do") 模糊匹配中的扩展匹配。以星号开始,注意这种路径不要以/开始。

④@WebFilter("/dept/*")属于前缀匹配。要以/开始。

⑤@WebFilter("/*")匹配所有的路径。

过滤器的调用顺序

过滤器的调用顺序,遵循栈数据结构。 下面通过一个例子来理解:

注意:在web.xml文件中进行配置的时候,Filter的执行顺序是什么?

依靠filter-mapping标签的配置位置,越靠上优先级越高。

注意:使用注解@WebFilter的时候,Filter的执行顺序是怎样的呢?

执行顺序是:比较Filter这个类名。

比如:FilterA和FilterB,则先执行FilterA

比如:Filter1和Filter2,则先执行Filter1

定义一个MyFilter1过滤器

package com.bjpowernode.javaweb.servlet;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init方法执行");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("Filter1 doFilter方法开始执行");
        chain.doFilter(request,response);
        System.out.println("Filter1 doFilter方法执行结束。");
    }
    @Override
    public void destroy() {
        System.out.println("destroy方法执行");
    }
}

定义一个MyFilter2过滤器

package com.bjpowernode.javaweb.servlet;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("Filter2 doFilter begin");
        chain.doFilter(request, response);
        System.out.println("Filter2 doFilter end");
    }
    @Override
    public void destroy() {
    }
}

选择在xml文件中配置,对应的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>myfilter</filter-name>
        <filter-class>com.bjpowernode.javaweb.servlet.MyFilter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myfilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>myfilter2</filter-name>
        <filter-class>com.bjpowernode.javaweb.servlet.MyFilter2</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myfilter2</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
</web-app>

定义一个AServlet类,路径通过注解的方式

package com.bjpowernode.javaweb.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/a.do")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("AServlet中的doGet方法执行了。");
    }
}

Filter的优先级是比Servlet高的,所以当进行访问时:http://localhost:8080/servlet14/a.do会先按照web.xml文件中的filter-mapping标签位置进行访问,遇到chain.doFilter(request, response)就会跳转到下一个Filter或者Servlet;所以最终结果如下:

Filter的生命周期

①Filter的生命周期和Servlet对象生命周期一致。

②唯一的区别:Filter默认情况下,在服务器启动阶段就实例化;而Servlet不会。

二、责任链设计模式改造oa项目

(1)我们先看一段java代码;这段代码也能实现过滤器的效果,遵循栈数据结构。但是这个程序的问题:在编译阶段已经完全确定了调用关系。 如果你想改变他们的调用顺序,必须修改以下java源代码。java代码修改,需要重新编译,项目需要重新测试,项目需要重新发布。这是一个繁琐的过程。显然,这种设计违背了:OCP原则。(开闭原则)

package com.bjpowernode.javaweb.servlet;
public class Test {
    public static void main(String[] args) {
        System.out.println("main begin");
        m1();
        System.out.println("main over");
    }
    private static void m1() {
        System.out.println("m1 begin");
        m2();
        System.out.println("m1 over");
    }
    private static void m2() {
        System.out.println("m2 begin");
        m3();
        System.out.println("m2 over");
    }
    private static void m3() {
        System.out.println("目标正在执行中。。。。");
    }
}

(2)Filter过滤器里有一个设计模式 :责任链设计模式。

过滤器最大的优点: 在程序编译阶段不会确定调用顺序。因为Filter的调用顺序是配置到web.xml文件中的,只要修改web.xml配置文件中filter-mapping的顺序就可以调整Filter的执行顺序。显然Filter的执行顺序是在程序运行阶段动态组合的。那么这种设计模式被称为责任链设计模式。

注:责任链设计模式最大的核心思想:在程序运行阶段,动态的组合程序的调用顺序!

tip:对于过滤器Filter的配置一般是配置到web.xml文件当中,不要使用注解的方式;这样更加的容易修改它们的执行顺序。

(3)使用过滤器改造OA项目

①首先配置web.xml文件

    <filter>
        <filter-name>loginfilter</filter-name>
        <filter-class>com.bjpowernode.oa.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

②编写一个过滤器,作为判断的登录

目前写的路径是:/* 表示所有的请求均拦截,所以要先分析一下,什么情况下不能拦截?

用户访问 index.jsp的时候不能拦截

用户已经登录了,这个需要放行,不能拦截。

用户要去登录,这个也不能拦截。

WelcomeServlet也不能拦截。

package com.bjpowernode.oa.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
 * @Package:com.bjpowernode.oa.filter
 * @Project:JavaWeb
 * @name:LoginFilter
 */
public class LoginFilter implements Filter {
    // 也可以只重写其中一个方法
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        // 注意这里要先进行强转为HttpServlet,后面才能调用对应的方法
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse) resp;
        // 获取请求路径
        String servletPath = request.getServletPath();
        // 获取当前session对象,获取不到就返回null
        HttpSession session = request.getSession(false);
        if("/index.jsp".equals(servletPath) || "/welcome".equals(servletPath) ||
                "/dept/login".equals(servletPath) || "/dept/exit".equals(servletPath)
                || (session != null && session.getAttribute("username") != null)){
            // 经过上面过滤,只有上面的路径才会直接通过;其它的操作都要先跳转到登录页面
            // 继续往下走
            chain.doFilter(request, response);
        }else{
            response.sendRedirect(request.getContextPath() + "/index.jsp");
        }
    }
}

这个过滤器写好以后,以后其它类也可以调用这个过滤器,都不用验证登录了;例如:一个员工的Servlet(EmpServlet)

package com.bjpowernode.oa.web.action;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
/**
 * 员工管理的。
 * 员工管理的前提也是需要先登录。
 */
public class EmpServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 乱码问题也可以写入过滤器当中
        // post请求乱码问题
        request.setCharacterEncoding("UTF-8");
        // 响应中文乱码问题
        response.setContentType("text/html;charset=UTF-8");
        HttpSession session = request.getSession(false);
        if(session != null && session.getAttribute("username") != null){
            String servletPath = request.getServletPath();
            //...
        }else{
            response.sendRedirect(request.getContextPath() + "/index.jsp");
        }
    }
}

对于原来的DeptServlet类也可以进行修改了:

        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute("username") != null){ // session对象不一定为null
            // 获取servlet path
            String servletPath = request.getServletPath();
            if ("/dept/list".equals(servletPath)){
                doList(request,response);
            }else if("/dept/detail".equals(servletPath)){
                doDetail(request,response);
            }else if("/dept/delete".equals(servletPath)) {
                doDel(request, response);
            }else if("/dept/add".equals(servletPath)) {
                doAdd(request, response);
            }else if("/dept/modify".equals(servletPath)) {
                doModify(request, response);
            }
        }else{
            // 跳转到登录页面
            response.sendRedirect(request.getContextPath()+"/index.jsp");
        }

修改为:

        String servletPath = request.getServletPath();
        if ("/dept/list".equals(servletPath)){
            doList(request,response);
        }else if("/dept/detail".equals(servletPath)){
            doDetail(request,response);
        }else if("/dept/delete".equals(servletPath)) {
            doDel(request, response);
        }else if("/dept/add".equals(servletPath)) {
            doAdd(request, response);
        }else if("/dept/modify".equals(servletPath)) {
            doModify(request, response);
        }

到此这篇关于Java Filter过滤器的使用教程的文章就介绍到这了,更多相关Java Filter过滤器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaWeb中过滤器Filter的用法详解

    目录 过滤器Filter 处理顺序 使用场景 自定义过滤器 源码分析 FilterDef FilterMap 初始化过滤器 创建过滤器链 ApplicationFilterChain 执行过滤器链 过滤器Filter 过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理.过滤器可以对request进行处理也可以对response进行处理. 处理顺序 如果过滤器链顺序如上图所示,那么对request请

  • 详解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 <!DOCTYPE html> <html lang=

  • 详解JavaWeb过滤器 Filter问题解决

    目录 基本概念 1.过滤器概述 2.使用过滤器解决中文编码异常问题 3.使用过滤器实现用户登录权限拦截 基本概念 1. Filter 过滤器它是 JavaWeb 的三大组件之一. 三大组件分别是: Servlet 程序. Listener 监听器. Filter 过滤器2. Filter 过滤器它是 JavaEE 的规范. 也就是接口3. Filter 过滤器它的作用是: 拦截请求, 过滤响应        过滤器的三要素: ①拦截 过滤器之所以能够对请求进行预处理,关键是对请求进行拦截,把请求

  • Java过滤器Filter详解

    目录 Filter学习 Filter功能 Filter的工作原理 多个Filter的实现 Filter的执行逻辑 总结 Filter学习 Filter功能 拦截jsp.静态图片文件.静态html资源文件 实现URL级别的权限访问控制 过滤敏感词汇 压缩相应信息 Filter的工作原理 看源码可以看出来,Filter接口中有3个方法:init.doFilter.destory init方法,初始化Filter,Filter在服务器启动阶段被实例化.并且调用init方法,init方法只执行一次,因为

  • Java中使用Filter过滤器的方法

    Filter过滤器 着重记录下 public void doFilter(){} 方法参数: (1) ServletRequest servletRequest 请求reqeust: (2)ServletResponse servletResponse 响应response: (3)FilterChain filterChain 参数 filterChain,有一个doFilter() 方法,调用这个方法,可以使程序继续往下走,执行后续代码,如果有多个过滤器,它会继续执行下一个过滤器逻辑(开发中

  • 深入了解Java中的过滤器Filter和监听器Listener

    目录 Filter:过滤器 概念 快速入门 过滤器细节 Listener:监听器 Filter:过滤器 概念 生活中的过滤器:净水器,空气净化器,土匪. web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能. 过滤器的作用: 一般用于完成通用的操作.如:登录验证.统一编码处理.敏感字符过滤... 快速入门 步骤 1.定义一个类,实现接口Filter 2.复写方法 3.配置拦截路径 web.xml 注解 代码 @WebFilter("/*")//访问所有资

  • Java Filter过滤器的使用教程

    目录 一.过滤器的使用以及实现原理 当前的oa项目还存在什么缺陷 Filter作用与执行原理 过滤器怎么写 过滤器的调用顺序 Filter的生命周期 二.责任链设计模式改造oa项目 一.过滤器的使用以及实现原理 当前的oa项目还存在什么缺陷 ①对于DeptServlet.EmpServlet.OrderServlet,每一个Servlet都是处理自己相关的业务:在这些Servlet执行之前都是需要判断用户是否登录了.如果用户登录了,可以继续操作,如果没有登录,需要用户登录. ②这段判断用户是否登

  • Java Filter 过滤器详细介绍及实例代码

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理.使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将

  • Java Web Filter 过滤器学习教程(推荐)

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过F

  • Java中过滤器 (Filter) 和 拦截器 (Interceptor)的使用

    1.过滤器 (Filter) 过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法. init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次.注意:这个方法必须执行成功,否则过滤器会不起作用. doFilter() :容器中的每一次请求都会调用该方法, FilterChain 用来调用下一个过滤器 Filter. destroy(): 当容器销毁 过滤器

  • Java微服务Filter过滤器集成Sentinel实现网关限流过程详解

    目录 Gateway-过滤器Filter 局部路由过滤器 使用局部过滤器 全局过滤器 使用全局过滤器 集成Sentinel实现网关限流 网关限流 API分组限流 Gateway-过滤器Filter 过滤器就是在请求的传递过程中,对请求和响应做一些手脚. 在Gateway中, Filter的生命周期只有两个:“pre”和“post”". .PRE:这种过滤器在请求被路由之前调用.我们可利用这种过滤器实现身份验证.在集群中选择请求的微服务.记录调试信息等. .POST:这种过滤器在路由到微服务以后执

  • 基于java servlet过滤器和监听器(详解)

    1 过滤器 1.过滤器是什么? servlet规范当中定义的一种特殊的组件,用于拦截容器的调用. 注:容器收到请求之后,如果有过滤器,会先调用过滤器,然后在调用servlet. 2.如何写一个过滤器? 1.写一个java类,实现Filter接口; 2.在接口方法中实现拦截方法; 3.配置过滤器(web.xml); 3.配置初始化参数 1.配置初始化参数.(init-param) 2.通过filterconfig提供的getinitparamenter方法读取初始化的值. 4.优先级: 当有多个过

  • JavaWeb Servlet中Filter过滤器的详解

    JavaWeb Servlet中Filter过滤器的详解 1.简述 Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制.过滤敏感词汇.压缩响应信息).Filter能够对Servlet容器的请求和响应进行检查和修改,其本身不能生成请求request和响应response,只提供过滤作用(Servlet被调用之前检查Request对象修改其相关信息,Servlet被调用后检查Response修改其相关信息),Filter对象常驻服务器. 2.Lifecyc

  • spring boot 配置Filter过滤器的方法

    Filter 过滤器是web开发中很重要的一个组件,下面以一个session登陆的例子介绍下spring boot中如何使用Filter 首先要准备一个实现了Filter的接口的类 SessionFilter: import org.slf4j.LoggerFactory; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRespo

  • Java web过滤器验证登录防止未登录进入界面

    今天用ssh2写了个简单的系统,发现了一个问题,我这系统必须先登录成功才能进入主页,但我在浏览器里直接输入主页地址,发现也能进入,这个肯定不好,毫无安全性可言,后经查资料发现需要登录过滤器,就试了下,发现果然可以避免未经登录即可进入主页的危险,下面是我整理出的详细步骤: 1.首先写一个权限过滤filter类,实现Filter接口 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter

随机推荐