Servlet技术规范中的过滤器Filter

本文介绍了Servlet中的Filter技术,包括过滤器的概念、开发步骤和生命周期,详细讲解了init、doFilter和destroy方法。同时,文章还探讨了MD5加密算法,包括其特点和常见应用场景,如密码加密存储。

1.1过滤器概述

1.1.1什么是过滤器?

Servlet技术规范中, 定义了Servlet、Filter、Listener三门技术, 其中Filter也叫做过滤器,通过过滤器技术,开发人员可以实现用户在访问某个资源之前或之后,对访问的请求和响应进行拦截,从而做一些相关的处理。

  • 总结:
     所谓的过滤器, 就是拦截用户对资源的访问
    一个过滤器可以拦截多个资源, 一个资源也可以配置多个过滤器进行拦截
    其实所谓的拦截, 就是将代表请求的request对象和代表响

  • 应的response对象拦截下来,拦截下来后:
    (1)控制是否允许访问 – 用户登陆之后才能查看自己的页面
    (2)在访问资源之前或之后做一些处理 比如: 全站乱码解决

1.2开发过滤器

1.2.1开发过滤器的步骤

Servlet API中提供了一个Filter接口, 开发web应用时, 如果编写一个类实现了这个接口, 则这个类就是一个过滤器
(1)写一个类实现Filter接口, 并实现其中的方法
(2)在web应用的web.xml中配置过滤器

1.2.2Filter生命周期

当服务器启动时, web应用加载后会立即创建出当前web应用中的所有的Filter对象, 创建出来后, 立即调用init方法进行初始化出操作. 从此以后这个Filter对象一直驻留在内存中为后续所拦截的请求服务, 每次过滤到对资源的访问时, 都会执行doFilter这个方法进行拦截处理, 直到服务器关闭或者web应用移出容器为止, 随着web应用的销毁, 过滤器也跟着销毁, 在销毁之前会调用destroy方法执行善后的处理.

 <!-- 配置过滤器 -->
 <filter>
    <filter-name>EcodongFilter</filter-name>
    <filter-class>cn.tedu.filter.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>EcodongFilter</filter-name>
    <!-- 第一种方式:指定该过滤器所拦截的规则 
    <url-pattern>/servlet/*</url-pattern>
    <url-pattern>*.jsp</url-pattern>
    -->
    <!-- 第二种方式:指定该过滤器所拦截的规则 -->
    <servlet-name>ServletDemo1</servlet-name>
    <servlet-name>ServletDemo2</servlet-name>
    <!-- 配置所拦截的请求类型,默认REQUEST(普通请求)
        REQUEST:普通请求
        FORWARD:所拦截的资源是通过请求转发访问的
        INCLUDE:所拦截的资源是通过请求包含访问的
        ERROR:对异常访问的拦截,如:访问A,A抛出了异常,请求将会访问一个友好错误提示页面B,对B的访问就是ERROR类型
     -->
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

1.3Filter中的方法介绍

1.3.1init方法

init(FilterConfig filterConfig)
init方法在Filter实例创建完成后立即执行,进行初始化的操作,其中FilterConfig是代表当前Filter在web.xml中配置信息的对象。

1.3.3destory方法

destroy方法在Filter实例销毁之前调用,进行善后的处理

1.3.2doFilter方法

doFilter(request, response, FilterChian filterChian)
其中参数FilterChian表示多个过滤器组成的过滤器链对象
一个web资源可以被多个过滤器所拦截, 多个过滤器拦截的顺序是按照Filter在web.xml中配置的的顺序执行的.这多个过滤器按照拦截的顺序就组成了一个拦截器链, 用FilterChian表示.

如果一个过滤器处理完所拦截的请求后, 想要执行后面的拦截器, 则可以调用FilterChian上doFilter方法, 表示放行过滤器, 接着执行下一个节点,如果下一个节点仍然是过滤器, 则接着进行过滤, 执行的过程同上,如果没有后续的过滤器, 则执行真正的资源处理这次请求。

2.2.2MD5加密算法介绍

数据摘要算法、数据指纹算法

- 特点:

任意长度的二进制数, 经过MD5加密计算后, 都可以得到一个128位长的二进制密文
相同的原文经过加密后得到的密文永远相同
不同的原文经过加密后得到的密文永远不同
只能从原文加密成密文, 密文永远也解不回原文
MD5加密算法在很多应用场景下都有所应用

2.2.3MD5应用:
  • 可以根据自己的需要创建工具类, 提供md5方法实现MD5加密功能(代码片段如下,可以复制走直接使用)
public static String md5(String plainText) {
    byte[] secretBytes = null;
    try {
        secretBytes = MessageDigest.getInstance("md5").digest(
                plainText.getBytes());
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException("没有md5这个算法!");
    }
    String md5code = new BigInteger(1, secretBytes).toString(16);
    for (int i = 0; i < 32 - md5code.length(); i++) {
        md5code = "0" + md5code;
    }
    return md5code;
}
  • 使用场景例如:
    1.登陆时, 密码应该先加密再和数据库中的密码做比较
    2.注册时, 密码应该先加密再存入数据库
    3.实现自动登陆时, 在将用户名和密码保存进Cookie之前, 需要将密码加密后再保存进Cookie
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值