Filter过滤器 | 【大学生博客大赛】
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Filter过滤器 | 【大学生博客大赛】,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6055字,纯文字阅读大概需要9分钟。
内容图文
![Filter过滤器 | 【大学生博客大赛】](/upload/InfoBanner/zyjiaocheng/1005/0df7429f301e43148b8c1508702a5928.jpg)
1.1. 过滤器概念
1.1.1. 过滤器的基本概念
Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器,Filter 过滤器它是 JavaEE 的规范。也就是接口。
1.1.2. 过滤器的功能
(1)过滤器可以拦截对资源的访问
(2)一个过滤器可以拦截多个资源,一个资源也可能被多个过滤器拦截
(3)所谓的拦截是根据访问的URL地址来确定访问的是哪个资源,确定是否拦截
(4)所谓的拦截其实就是拦截下来代表请求的request和响应的response
(5)拦截后:控制是否允许访问、访问之前和之外做一些额外操作
1.2. 过滤器开发入门
1.2.1. 开发过滤器的两个步骤
想要开发一个过滤器,需要如下两个步骤。
(1)写一个类实现Filter接口
(2)在web.xml中配置过滤器
1.2.2. 写一个类实现javax.servlet.Filter接口
init为初始化方法,在Filter对象被创建出来时,Servlet容器会调用该方法对filter进行初始化。
destory为销毁的方法,在过滤器对象被销毁之前,服务器会调用这个方法执行善后工作。
doFilter为过滤器中最核心的方法,当过滤器拦截到对资源的访问时,服务器会自动调用该方法执行过滤代码。 我们只需要在这个方法中设计过滤器的逻辑代码即可。
其中FilterConfig代表当前过滤器在web.xml中的配置。
FilterChain代表过滤器链。
一个资源可能被多个过滤器所拦截,拦截的顺序是按照这些过滤器的<filter-mapping>在web.xml中的配置顺序所决定
所有拦截当前资源的过滤器按照拦截顺序就组成了一个拦截器链,filterchain,代表的就是当前拦截器链.filterchain对象提供了一个dofilter的方法,一旦执行这个方法,表明当前过滤器放行,执行过滤器链的下一个节点,如果下一个节点没有过滤器了,就执行真正要访问的资源。
1.2.3. 在web.xml中配置一下过滤器
<filter> --- 配置过滤器 <filter-name>FirstFilter</filter-name> ---为过滤器起一个名字 <filter-class>com.itheima.filter.FirstFilter</filter-class> ---过滤器类的全路径名 <init-param> --- 可选的 可以配置多个 过滤器的初始化参数 可以在过滤器中通过FilterConfig对象来获取 <param-name>name1</param-name> <param-value>value1</param-value> </init-param> </filter> <filter-mapping> --- 配置过滤器的拦截路径 ,一个<Filter>可以配置多个<filter-mappint> <filter-name>FirstFilter</filter-name> ---为哪个过滤器进行配置 <url-pattern>/*</url-pattern> --- 拦截哪个路径 其中url-pattern的写法和学习Serlvet时的url-pattern的写法相同 这个url-pattern可以配置多个 <servlet-name>Demo1Servlet</servlet-name> ---拦截哪个名字的Servlet 可以配置多个 <dispatcher>REQUEST</dispatcher> --- 配置拦截哪种类型的对资源的访问,可选的值有REQUEST FORWARD INCLUDE ERROR,如果不配置默认只拦截REQUEST方式,如果具体配置了就拦截具体配置的方式的对资源的访问,此标签可以配置多个 </filter-mapping>
1.3. Filter的生命周期
1.3.1. Filter的生命周期
当服务器启动,web应用加载后,立即创建出这个web应用中的所有过滤器对象,创建出来后立即调用过滤器的init方法执行初始化操作.从此这些过滤器对象驻留在内存中为后续的拦截进行服务.每当拦截到资源时,都会导致dofilter方法执行.最终直到服务器关闭或web应用移除出容器时,随着web应用的销毁,过滤器对象销毁,销毁之前调用destory方法执行善后工作。
1.4. FilterConfig接口
1.4.1. Filterconfig接口
用户在配置filter时,可以使用<init-param>为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。
1.4.2. Filterconfig接口提供的方法
FilterConfig提供的方法:
String getFilterName():得到filter的名称。
String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
public ServletContext getServletContext():返回Servlet上下文对象的引用。
1.5. EasyMall全站乱码解决过滤器
1.5.1. 全站乱码过滤器
我们可以开发一个Filter,拦截所有的动态web资源,在动态web资源执行之前,解决好乱码,从而一劳永逸的解决全站乱码问题。
对于响应数据乱码,只需要设置Content-Type即可解决乱码。
对于请求参数乱码,如果是POST提交,可以一行代码解决,如果是GET提交需要手动的编解码解决乱码。
1.5.2. 代码实现
<filter> <description>全站乱码过滤器</description> <filter-name>EncodingFilter</filter-name> <filter-class>com.itheima.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1.6. EasyMall实现30天内自动登录
1.6.1. 30天自动登录
想要实现自动登录,需要通过Cookie保存用户名密码在客户端,然后通过过滤器拦截请求,对于未登录而带有自动登录cookie且自动登录cookie中保存的用户名密码都正确则在放行资源之前做自动登录操作。
<filter> <description>自动登录过滤器</description> <filter-name>AutologinFilter</filter-name> <filter-class>com.itheima.filter.AutologinFilter</filter-class> </filter> <filter-mapping> <filter-name>AutologinFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1.7. MD5
1.7.1. MD5概述
用户名密码保存在客户端是一种十分危险的行为。所以需要进行加密后保存。
其中MD5就是一种比较常用的加密算法。
与其说MD5算法是一种加密算法,不如说是一种数据指纹(数据摘要)算法。
其特点如下:
任意大小的二进制数经过MD5计算后都能得到一个独一无二的128位二进制数。
不同的数据算出的MD5绝对不相同。
相同的数据算出的MD5一定相同。
只能有明文算出密文,密文是永远也无法算成明文的。
MD5大量应用于计算机中。如数据库中保存的密码通常都是经过MD5加密后的数据。如用户下载文件时可以进行MD5校验防止数据被篡改。
在记住用户名案例中,我们可以使用MD5进行加密后再保存在客户端,从而保证数据安全。
在数据库中保存的密码也不宜直接存储为明文。也要经过MD5加密后存储。
1.7.2. JAVA实现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; }
内容总结
以上是互联网集市为您收集整理的Filter过滤器 | 【大学生博客大赛】全部内容,希望文章能够帮你解决Filter过滤器 | 【大学生博客大赛】所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。