过滤器:

定义:是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤

工作原理:

生命周期:

实例化,通过配置web.xml,web容器启动的时候只会实例化一次

初始化,init(),加载初始化信息,只执行一次。

这个是过滤器的初始化方法,web容器创建过滤器实例后悔调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数

过滤,doFiter(),执行n次

这个方法完成实际的过滤操作,这个地方是过滤器的核心方法,当用户请求访问与过滤器关联的url时,web容器将先调用过滤器的doFilter方法。

FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器,或者目标资源,或利用转发,重定向将请求转发到其他资源。

销毁,destory(),web容器关闭的时候回销毁

web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源(大多数情况用不到)。

过滤器链:

用户请求先执行过滤器1的doFilter中的Code1方法(放行前的方法),再执行Chain.doFilter方法,再执行过滤器2中的doFilter中的Code1方法,再执行Chain.doFilter方法,到达web资源,也就是Servler的serbice方法。处理完响应后,把处理后的响应数据首先反馈给过滤器2的Code2(放行方法后的方法),再反馈给过滤器1的Code2方法,最后响应给用户。

过滤器分几种类型:

Servler2.5

REQUEST:

用户直接访问页面时,web容器将会调用过滤器

FORWARD:目标资源是通过requestDispatcher的forward方法访问时,该过滤器将会被调用

INCLUDE:目标资源是通过requestDispatcher的inclued方法访问时,该过滤

器将会被调用

ERROR:目标资源是通过声明式异常处理机制调用时,该过滤器将会被调用

Servler3.0 新增ASYNC:支持异步处理

@WebFilter

Springboot中配置过滤器步骤:

方法一:

1.新建myFilter类,实现Filter接口(javax.servler下的)

实现init(),doFilter(),desory()

2.在myFilter类上添加注解,@WebFilter, urlPatterns = {"/test/hello"}

注意:test是HelloController的映射路径,hello是HelloController下的一个测试方法。

package com.example.guoq.CommonUtils;

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import java.io.IOException;

@WebFilter(filterName = "myFilter",urlPatterns = {"/test/hello"})

public class myFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

System.out.println(">>init>>>>>>>>>>>>");

}

@Override

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

System.out.println(">>start>>>>>>>doFilter>>>>>");

filterChain.doFilter(servletRequest,servletResponse);

System.out.println(">>end>>>>>>>doFilter>>>>>");

}

@Override

public void destroy() {

System.out.println(">>>>>destory>>>>>>>>>>>>>>>>");

}

}

3.在springboot启动类上添加@ServletComponentScan注解,启动

这个时候,控制台会打印init这个方法,然后执行test下的hello方法会打印doFilter中的代码。

注:如果没有在启动类上添加注解@ServletComponentScan,而是在myFiler添加注解Component,这个时候会过滤所有的路径(亲测)。

package com.example.guoq;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.web.servlet.ServletComponentScan;

@ServletComponentScan

@SpringBootApplication

public class DemoApplication {

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

}

------------

package com.example.guoq.controller;

import com.example.guoq.CommonUtils.ShareRunable;

import com.example.guoq.CommonUtils.SimpleCached;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping("/test")

public class HelloController {

SimpleCached simpleCached=new SimpleCached();

@RequestMapping("/hello")

public String index(){

return "hello world";

}

}

---------------

方法二:

1.新增一个FilterConfiger类,该类添加@Configuration和@Bean注解,如下,

addUrlPatterns添加过滤的路径,test是HelloController的映射

package com.example.guoq.config;

import com.example.guoq.CommonUtils.myFilter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class FilterConfig {

@Bean

public FilterRegistrationBean filterRegistrationBean(){

FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();

filterRegistrationBean.setFilter(new myFilter());

filterRegistrationBean.addUrlPatterns("/test/hello");

return filterRegistrationBean;

}

}

2.新增myFilter类,实现Filter,不添加任何注解

package com.example.guoq.CommonUtils;

import javax.servlet.*;

import java.io.IOException;

public class myFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

System.out.println(">>init>>>>>>>>>>>>");

}

@Override

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

System.out.println(">>start>>>>>>>doFilter>>>>>");

filterChain.doFilter(servletRequest,servletResponse);

System.out.println(">>end>>>>>>>doFilter>>>>>");

}

@Override

public void destroy() {

System.out.println(">>>>>destory>>>>>>>>>>>>>>>>");

}

}

3.启动,执行test下的hello方法

java总结 --4.过滤器相关推荐

  1. Java web—Servlet过滤器(Filter)

    前言:         过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...

  2. java面包屑实现_在Java中实现过滤器和面包店锁

    java面包屑实现 为了了解锁的工作原理,实现自定义锁是一种好方法. 这篇文章将展示如何在Java上实现Filter和Bakery锁(自旋锁),并将它们的性能与Java的ReentrantLock进行 ...

  3. 在Java中实现过滤器和面包店锁

    为了了解锁的工作方式,实现自定义锁是一个好方法. 这篇文章将展示如何在Java上实现Filter和Bakery锁(自旋锁),并将它们的性能与Java的ReentrantLock进行比较. 过滤器锁和面 ...

  4. java nodefilter类,Java Servlet Filter过滤器概述

    Java Servlet Filter过滤器概述 Filter是Servlet的过滤器,是Servlet 2.3规范中新增加的一个功能,主要用于完成一些通用的操作,如编码的过滤.判断用户的登录状态等. ...

  5. java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...

    JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...

  6. Java三大器之过滤器(Filter)的工作原理和代码演示

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...

  7. java filenamefilter_「创作开运礼」Java之FileNameFilter过滤器的使用

    各位小伙伴们大家好,在之前的文章中小编介绍了Java之FileFilter过滤器的使用与及原理的简单介绍,这次小编要介绍的是ileNameFilter过滤器的使用. 在使用FileFilter过滤器的 ...

  8. [JAVA EE] Filter过滤器

    Filter过滤器 ◼ 过滤器(Filter)可以动态地拦截请求和响应. ◼ 应用场景:过滤敏感词汇.防止SQL注入.设置字符编码.进行URL级 别的权限访问控制.压缩响应信息等. 启动文件DemoA ...

  9. java web 开发应用 ----过滤器

    过滤器的作用 1.当用户请求web资源时,如果没有过滤器,用户可以直接获取到这个web资源,当有了过滤器之后,当用户请求web资源时,web容器中的过滤器先会拦截到这个请求,然后根据这个请求 做相应的 ...

  10. java实现文件名过滤器接口_Java使用文件过滤器FileFilter、FilenameFilter搜索文件

    搜索文件优化,使用文件过滤器来搜索文件 我们可以使用过滤器来实现在某一目录下指定文件格式的搜索 在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器 一.FileFilter ...

最新文章

  1. 神经网络 | 受限波尔兹曼机(附源代码)
  2. 解决谷歌浏览器F12打不开调试页面的问题。
  3. 这可能是你与 AI 大神们近距离接触的唯一机会……
  4. oracle怎么删除存储,删除Oracle分区存储是一个怎样的过程?
  5. sql判断基数_SQL Server中的基数估计框架版本控制
  6. 2017.3.11[bzoj2440][中山市选2011]完全平方数
  7. [20150610]使用物化视图同步数据.txt
  8. 通俗地告诉你:为什么Dijkstra算法是正确的?
  9. 视频教程-QT/C++从新手到老手系列之QT基础篇-其他
  10. 重磅:使用UOS微信桌面版协议登录,wechaty免费版web协议重放荣光
  11. <PCI-E> PCI-E的 x1/x4/x8/x16 四种插槽区别
  12. HCNE之RIP协议总结
  13. 数据分析实战项目2:优衣库销售数据分析
  14. win10怎么用计算机的搜索,win10搜索文件内容怎么操作_win10如何搜索文档内的内容...
  15. 微信小程序线上点餐问题及解决
  16. 一文看懂半监督学习(Semi-supervised Learning)和自监督学习(Self-Supervised Learning)
  17. Zotero中文文献管理
  18. 怎么搭建网校系统,培训机构搭建专属网校平台源码
  19. [bzoj3698]XWW的难题 有源汇的上下界最大流
  20. Linux和Windows误删文件恢复办法

热门文章

  1. 面对Exchange邮箱的英文界面,我们应该这么办!
  2. TOJ 5136: 隧道有多长
  3. 如何使用heic图片转换精灵,将heic转成JPG
  4. 清华大学计算机夏文韬,2016安徽综合评价入围考生名单公示
  5. python3tkinter去掉边框
  6. 音乐欣赏课程笔记(二)
  7. vbscript错误代码及对应解释大全/VBScript 语法错误
  8. [分享]《点一盏心灯》
  9. 如何接受上级指令_接受上级的命令是什么成语?
  10. 收获 3 亿用户的背后,华为智能助手的征程与野望