Servlet技术规范中的过滤器Filter
来源:互联网 发布:宜家的床 知乎 编辑:程序博客网 时间:2024/05/21 11:35
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
- Servlet技术规范中的过滤器Filter
- Servlet中的Filter过滤器
- Servlet中的过滤器Filter
- servlet中的Filter过滤器
- Servlet中的过滤器Filter
- servlet 中的过滤器(filter)
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- Servlet中的过滤器Filter详解
- 【每日一糗】今天应该是被腾讯云的人笑话了
- 安全体系(一)—— DES算法详解
- xampp配置多台虚拟主机
- lstm情感分析
- 2017第三届中国(重庆)国际物流展会刊(参展商名录)
- Servlet技术规范中的过滤器Filter
- 存储过程、函数、触发器的区别
- [转]HTML状态码大全(301,404,500等)
- hive表insert table into这个要注意
- 各种echarts图示例代码
- SMTP协议分析
- [js高手之路]设计模式系列课程-设计一个模块化扩展功能(define)和使用(use)库
- 九度 题目1438:最小公倍数
- 9.6