12--过滤器
不得不说过滤器了,在Web安全中,过滤器也是一个重要的环节。其实过滤器本质就是一个Servlet,当然你可以认为它本身就是一个组件。它所处的位置是在请求到达Servlet的中间位置,等于它是Servlet的之前的一道屏障,负责截获请求或处理请求,在Servlet响应发给客户之前过滤器也可以处理响应。过滤器的部署都是在部署文件(Web.xml)实现的。对于Servlet而言,它是不知道在客户与它请求中间会有过滤器存在的,所以对于它而言该干什么就干什么。过滤器的功能和Servlet一样,分为请求处理,和相应。过滤器的处理请求作用可以分为三种:对请求进行安全检查,可以根据实际情况格式化请求体,当然最为重要的用途是建立请求审计或者是日志。响应的过滤器一般可以追加或修改响应消息,也可以创建一个不同的响应消息。接受和相应消息的过滤器都是实现同一个接口Filter。所以对于容器而言,只要实现了Filter接口的都属于过滤器的范畴。
让我们看一看过滤器的生命周期吧!过滤器接口中三个方法,基本概括了过滤器的生命周期:inti(),doFilter(),destroy()。先说说init()方法,这是过滤器的初始化工作,init参数是一个FilterConfig对象的引用。过滤器的初始化,其实是在容器初始化的过程中完成的。而真正起到过滤的动作则是在doFilter中完成的,在这里面是三个参数ServletRequest,ServletResponse,FilterChain。FilterChain从名字上来讲是一个过滤责任链,它能够把前后不同的过滤器关联在一起。容器会按照部署文件定义过滤器的方法依次调用过滤器的方法,而这个就是靠FilterChain方法来实现的。这种方式其实是按照设计模式中责任链模式构建而成的:
过滤器接受请求并响应对象。然后过调用滤器方法会检查请求对象,并决定将该请求转发给链中的下一个组件,或者中止该请求并直接向客户端返回一个响应。如果请求被转发了,它将被传递给链中的下一个资源。在这个请求设法通过过滤器链并被服务器处理之后,一个响应将以相反的顺序通过该链发送回去。这样就给每个过滤器都提供了根据需要处理响应对象的机会。真正的实现如下:1)声明过滤器,这个是在<filter>标签定义的。2)声明对应URL模式的过滤器映射 3)声明对应Servlet的过滤器映射。之后许多框架和模式都是自己的过滤器方式,但是追求源头都是出之同一个原理。有些方式虽然不一样,但大多同出一体。
关于Servlet的单元就告一段罗!下一个单元我将在Servlet基础上展开那就是JSP!