java过滤器中Filter的ChainFilter过滤链
作者:IT_laobai 发布时间:2021-09-29 00:03:42
1、什么是过滤器?
在客户端到服务器的过程中,当发送请求时,如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行,在服务器给客户端响应时也会进行判断 如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行。
OOP:Java面向对象编程,抽象、封装、继承、多态。
AOP:面向切面编程,过滤器就是一个面向切面的编程思想。
AOP是sun公司srvlet2.3版本之后推出的新功能,在2.3之前的版本没有该功能,定义一个过滤器需要实现(implement)Filter接口,这里实现的是javax.servlet.Filter。
过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
①以常规的方式调用资源(即,调用servlet或JSP页面)。
②利用修改过的请求信息调用资源。
③调用资源,但在发送响应到客户机前对其进行修改。
④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。
2、过滤器的生命周期:
在项目开始启动的时候,过滤器开始初始化,当有请求来的时候开始自动去执行doFilter方法,随着项目的关闭过滤器开始停止。
3、过滤器有什么用?
过滤器主要的作用是过滤请求,可以通过Filter技术,web服务器管理的所有web资源:例如:JSP、Servlet、静态图片文件、或静态HTML文件进行拦截,从而实现一些特殊功能,例如:实现URL级别的权限控制、过虑敏感词汇、压缩响应信息等一些高级功能。
4、该怎么用?
可以写多个,从用户访问——》第一个过滤器——》第二个过滤器——》Servlet
过滤器的生命周期:随着项目的启动而创建,当访问了地址后而调用doFilter方法,这个会多次执行,随着项目的关闭而销毁。
调用doFilter方法时有三个参数:
reqest(ServletRequest)——》HttpServletRequest(注意强转:在使用HttpServletRequest这个独有的方法时要强转)
response(ServletResponse)——》HttpServletResponse(注意强转:在使用HttpServletResponse这个独有的方法时要强转)
filterchain 链 可以指向下一个地址(如果有过滤器则指向下一个过滤器,没有指向资源Servlet) 过滤、拦截、放行
chain.doFilter(req,resp);//放行
ChainFilter链:
它可以指向下一个资源,如果还有过滤器,则继续进行下一次的过滤,如果没有过滤器,则会指向资源(servlet)。
filter应用场景:
(1).为所有的Servlet设置编码
(2).设置跨域问题
(3).解决所有的防盗链问题
使用过滤器的时候需要配置的文件:
(1)、固定地址
(2)、通配符
(3)、指定目录
过滤器代码奉上:
package servlet; import javax.servlet.*;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/*** urlPattern={"/*"}获取所有的Servlet的映射路径,实现不同Servlet之间的交互*/@WebServlet(name = "DemoFilter",urlPatterns = {"/*"})public class DemoFilter implements Filter{/*** 过滤器的初始化方法* @param filterConfig 可以获取部署描述符文件(web.xml)中分配的过滤器初始化参数。* @throws ServletException*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器被创建了");}/**** @param servletRequest 请求* @param servletResponse 响应* @param filterChain 链条,对过滤器进行阻止和放行* @throws IOException* @throws ServletException*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("过滤器被执行了");servletResponse.setContentType("text/html,charset=utf-8");HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;response.addHeader("Access-Control-Allow-Origin","*");String referer = request.getHeader("referer");System.out.println(referer);filterChain.doFilter(servletRequest,servletResponse);//放行}@Overridepublic void destroy() {System.out.println("过滤器被销毁了");}}
来源:https://blog.51cto.com/13797478/2130772
猜你喜欢
- 简介最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括:专门针对Java语言的:Kryo,FST等等跨语言的:
- 分析:label标签控件是主线程创建的,不能直接从另一个线程访问.可以这样认为:不能跨线程直接访问控件;最简单的办法就是:using Sys
- 前言此节假日为严格按照国家要求的双休和法定节假日并且包含节假日的补班信息,大家可根据自己的需求自定义处理哦。以下为Maven配置,是程序用到
- 目录环境依赖数据源方案一 使用 Spring Boot 默认配置方案二 手动创建脚本初始化使用 JdbcTemplate 操作实体对象DAO
- 工厂模式Spring中bean的创建,默认是框架利用反射new出来的bean实例。有时候也会有一些复杂的情况。假设有一个飞机,属性如下,现在
- CSDN 的小伙伴们,大家好,我是沉默王二。重写(Overriding)算是 Java 中一个非常重要的概念,理解重写到底是什么对每个 Ja
- 通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了。
- 这是一个可以从乱码文本中得到正确的原始文本的程序,其基于的原理在于错误的编码往往导致位补充,因此正确的文本使用的字节数应该是最少的(之一)。
- * 是许多框架底层实现的基础,比如Spirng的AOP等,其实弄清楚了 * 的实现原理,它就没那么神奇了,下面就来通过案例和分析JDK
- Consumer消费者Demo示例<?xml version="1.0" encoding="UTF-8
- 网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类。通过这个类可以连接到指定IP或域名的服务器上,并且可以和
- 本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇,
- 一、项目背景在实际工作中,会遇到业务比较集中的情况,随着时间推延,这部分业务关联的mysql表就会越来越大,十分臃肿。尽管在项目架构上做了读
- 此篇文章内容仅限于 描述 thy3.0 自定义标签的说明,所以你在看之前,请先会使用它。直奔主题,以下代码是如何引用 第三方标签的。说明:
- java 避免出现NullPointerException(空指针)的方法总结Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出
- 1.问题产生情况我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_gene
- 前言Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util
- 我的电脑环境win10vscode 1.36.1vscode安装插件安装完这个插件后会提示你安装 platformIOCore,按照提示安装
- 笔者语录: 我发现我喜欢捣鼓一些小玩意儿,虽然官网(见文末)写得很明白了,但是咱们对感兴趣的部分来敲一遍代码好吧。过滤器简介:简介logba
- 在java项目开发中。最开始换行符大家一般是在idea中设置新文件为LF,并且对旧文件通过IDEA下方的点击来更换换行符。很显然,对于几千文