---Filter(二)针对http请求的Filter
来源:互联网 发布:淘宝宝贝优化 编辑:程序博客网 时间:2024/05/16 06:15
在使用filter的时候,因为从接口Filter中的doFilter方法中的参数是ServletRequest和ServletResponsevoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
,但是对于大多数时候都是针对http来用的,可以参照Generic的做法,设计一个抽象类,让其成为所有Filter的父类。
具体做法:
- 重载接口中的doFilter方法,将ServletRequest和ServletResponse改为为HttpServletRequest和HttpServletResponse。
- 在实现自Filter接口中的中将ServletRequest和ServletResponse强制转为HttpServletRequest和HttpServletResponse,并且调用对应的http的方法
- 添加一个FilterConfig属性,设置其getter方法,并且在init(FilterConifig filterConfig)中初始化当前的属性;
- 再重写一个空参的init()方法,并且在带参的init(FilterConifig filterConfig)中调用。当子类需要重写init方法的时候,重写空参的init方法即可。
HttpFilter.java
package com.tuxianchao.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * * 利用Filter来过滤的时候大都是Http请求和Http响应,在doFilter方法中,参数类是ServletRequest和ServletResponse * ,使用的时候一般需要强制转换为HttpServletRequest和HttpServletResponse * 。针对这个问题,可以仿照GenericServlet 的做法,来定义一个HttpFilter,用作所有Filter的父类 * * * */public abstract class HttpFilter implements Filter { private FilterConfig filterConfig; public FilterConfig getFilterConfig() { return filterConfig; } public void destroy() { } public abstract void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException; /* * * 原生的Filter接口的实现方法doFilter中, * 将ServletRequest和ServletResponse转为HttpServletRequest和 * HttpServletResponse,并且调用了重载的doFilter(HttpServletRequest request, * HttpServletResponse response, FilterChain chain)方法 */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { doFilter((HttpServletRequest) request, (HttpServletResponse) response, chain); } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; init(); } /** * 供子类继承的初始化方法.如果之类需要重写init方法,建议重写空参的init方法,直接覆盖带参的init方法如果不在子类中调用父类的 * init方法(super.init(config)),容易造成filterConfig未初始化, */ protected void init() { // TODO Auto-generated method stub }}
0 0
- ---Filter(二)针对http请求的Filter
- Filter二(利用Filter实现简单的登录验证)
- 如何让某些http请求绕过Filter
- filter学习心得(二)
- iptables学习(针对filter链)
- 深入浅出DirectShow Filter(二)
- 深入浅出DirectShow Filter(二)
- java过滤器(Filter)二
- 深入浅出DirectShow Filter(二)
- 深入浅出DirectShow Filter(二)
- 使用Filter统计Java(J2EE)的web程序http请求响应时间
- filter如何设置例外的请求
- Filter的使用及处理特殊请求
- SpringMVC filter设置例外的请求
- springboot Filter 截取 restful 的请求参数
- 解决跨域请求的filter
- Http请求域、会话域(servlet、session)、filter:概念、使用
- Tomcat一次http请求处理,filter、servlet调用流程
- JAVA注意事项-01
- 自己动手搭建MVC之三
- 学习笔记-Linux C编程实践
- unity 使对象不悬空
- 正则表达式入门-知识字典
- ---Filter(二)针对http请求的Filter
- 29 图片缩小案例
- discuz 取消发帖验证码
- 变量作用域
- 【框架】Imager-loader_1.9.4图片下载框架
- Python 实现决策树 ID3 C4.5 悲观剪枝
- const在函数前与函数后的区别
- Redis从无到有
- thinkphp基础