最近项目中需要对URL进行深度过滤,避免浏览器恶意访问,首先想到的就是过滤器,Filter。在java中处理该类事件最简单的方法无非就是增加一个过滤器。
关于过滤器的概念以及工作原理这里就不赘述了,主要讲下在写过滤器时需要的步骤,写过滤器之前大家应该了解AOP的概念,我们可以理解为,在我们指定的一些访问操作之前必须要执行的步骤。
首先过滤器需要实现 java.servlet.Filter接口。
Filter中有三个方法,init(),doFilter(),destroy();
--init() 方法用来初始化过滤器,可以在init()方法中获取Filter中的初始化参数。
--doFilter()方法完成过滤操作。当请求发过来的时候,过滤器将执行doFilter方法。
--destroy()
Filter对象创建后会驻留在内存,当web应用移除或服务器停止时调用destroy()方法进行销毁。在Web容器卸载 Filter 对象之前被调用。destroy()方法在Filter的生命周期中仅执行一次。通过destroy()方法,可以释放过滤器占用的资源。
接下来我们来写一个filter;
在实现了Filter之后,我们对init以及doFilter进行处理;
在init()中,我这边初始化了一个key为user.initView的字符串,当我们的web.xml文件中配置了该字符串后,系统会默认帮我们初始化。
doFilter中我们通过request以及response对访问的请求进行处理。
接下来看下web.xml
首先通过<filter>标签初始化我们的 filter, 其中<filter-name>是自定义命名,<filter-class>指定我们创建的filter的全路径(包名+类名);<init-param>为初始化参数,也就是我们init()方法中接收到的参数;其中param-name为key,param-value为value;
然后我们还要通过<filter-mapping>来处理我们需要对哪些请求进行过滤,首先要通过<filter-name>来制定使用哪一个过滤器,然后通过<url-pattern>来指定需要过滤的请求,这样我们的过滤器就大功告成了。