web过滤器

过滤器的工作原理及应用

       Servlet过滤器是实现了javax.servlet.Filter接口的服务器端程序,其工作原理是,只要在web.xml文件配置好要拦截的客户端请求,此时可以对请求或者响应统一设置编码,简化操作;同时还可以进行逻辑判断,是否以登陆,有没有权限访问。它是随web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当web应用停止或重新部署的时候才销毁。

       当在web.xml中注册了一个filter对某个servlet程序进行拦截处理时,这个filter就成了servlet容器与该servlet程序的通信线路上的第一道关卡,该filter可以对Servlet容器发送给servlet程序的请求和servlet程序回送给servlet容器的响应进行拦截,可以决定是否请求继续传递给servlet程序,以及对请求和响应消息是否进行修改。

        在一个web应用程序中可以注册多个filter程序,每个filter程序都可以对一个或一组servlet程序进行拦截

        若多个filter程序对某个servlet程序的访问过程进行拦截,当针对该servlet的访问请求到达时,web容器将把这个filter程序组合成一个filter链(过滤器链)filter链中各个filter的拦截顺序与他们在应用程序的web.xml中映射的顺序一致。

 在web中过滤器的主要作用

  1. 对用户请求进行统一认证(限制IP,不允许黑名单用户访问)
  2. 对用户请求进行记录,审核(写入日志)
  3. 对用户发送的数据进行过滤和替换(过滤不良消息)
  4. 转换图像格式
  5. 对响应内容进行压缩,减少传输量
  6. 对请求,响应内容进行加密,解密操作

过滤器的类和接口

过滤器本质是一个Servlet类,只是它要实现Filter接口。与过滤器相关的接口有三个,(Filter,FilterConfig,FilterChain)位于Javax.servlet包中。

实现:

过滤器必须实现Filter接口,然后使用这个过滤器类中的FilterChain和FilterConfig接口,该过滤器的引用将传递给FilterChain对象,以允许过滤器把控制权传递给链接中的下一个资源。FilterConfig对象将由容器提供给过滤器,以允许访问该过滤器的初始化数据。

Filter接口

(1)初始化   

void init(FilterConfig fileterConfig)Servlet容器创建Servlet过滤器实例后将调用这个方法,在此方法中可以读取webxml文件的内容,包括servlet过滤器的初始化参数,也可以获得应用程序的上下文对象。

void init(FilterConfig fileterConfig){
    
    this.FilterConfig=filterConfig;

}

(2)处理请求和响应

void doDilter(ServletRequest request,ServletResponse response,FilterChain chain)  完成实际的过滤操作,当客户请求访问与过滤器相关的URLhttps://baike.baidu.com/item/url/110640?fr=aladdin时,servlet先调用doFilter方法,FilterChain参数用于访问后续过滤器。

void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
{
    //前置代码--在访问资源前执行
    chain.doFilter(request,response);
    //后置代码--在访问资源后执行
}

(3)销毁

void destroy() servlet容器在销毁过滤器实例前调用该方法,可在此释放servlet过滤器占用的资源

void destroy(){

    this.filterConfig=null;
}

FilterChain接口

过滤器链中的下一个过滤器被调用,如果调用该方法的过滤器是最后一个过滤器,那么目标资源将被调用

1(Filter1)         2(Filter2)         3 (servlet方法)

6                     5(后置代码)       4

FilterConfig接口

获取ServletContext和Filter配置参数

  1. String getFilterName()  得到过滤器名字
  2. ServletContext getServletContext()  得到山下文对象
  3. String getInitParameter(String name) 得到指定名称的初始化参数
  4. Enumeration getInitParameterNames()  得到所有初始化参数的名称,类型为集合

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Tomcat配置Web过滤器需要以下步骤: 1. 创建一个实现了javax.servlet.Filter接口的过滤器类。 2. 在web.xml文件声明该过滤器类,并为其指定一个URL模式或servlet名称,以确定哪些请求将会被该过滤器处理。 3. 在web.xml文件为该过滤器类指定初始化参数(如果需要)。 以下是一个示例过滤器类: ```java public class MyFilter implements Filter { private String encoding; public void init(FilterConfig filterConfig) throws ServletException { encoding = filterConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (encoding != null) { request.setCharacterEncoding(encoding); } chain.doFilter(request, response); } public void destroy() { // 释放资源 } } ``` 在web.xml文件声明该过滤器类: ```xml <filter> <filter-name>myFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 这将会把MyFilter类的实例映射到所有的URL模式上。在这个例子,我们把编码设置为UTF-8。所有的请求都会首先进入MyFilter,进行编码设置,然后再传递给下一个过滤器或Servlet。 当然,你也可以根据需要,为不同的URL模式或servlet名称指定不同的过滤器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值