码迷,mamicode.com
首页 > 其他好文 > 详细

Filter(过滤器)

时间:2017-03-22 01:11:38      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:缓冲   静态   释放   images   getattr   设置   配置   void   file   

一:过滤器(Filter)
过滤器可以对请求的资源(动态资源、静态资源)执行过滤任务。
过滤器的实现方式:
实现Filter接口,覆写其中的方法:
1. void init(FilterConfig filterConfig)
初始化过滤器时会调用此方法,Web容器启动时就初始化过滤器。
FilterConfig参数是过滤器的配置对象,它的常用方法有:
String getInitParameter(String name) 获取传递给过滤器的初始化参数
ServletContext getServletContext() 获取ServletContext对象

2.void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain)
FilterChain是过滤器链接口,使用此接口对象可以对请求“放行”,将
请求传递到下一个过滤器或资源。FilterChain的方法:
void doFilter(ServletRequest request,ServletResponse response)

3.void destroy()
过滤器销毁时调用,可在此方法中释放资源

二:过滤器的配置
注解配置:@WebFilter(filterName="HelloFilter",urlPatterns={"/images/*"},
initParams={
@WebInitParam(name="paramName",value="helloFilter")
})

web.xml配置:<filter>
<filter-name>second</filter-name>
<filter-class>org.qf.filter.SecondFilter</filter-class>
<init-param>
<param-name>paramName</param-name>
<param-value>second</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>second</filter-name>
<url-pattern>/images/*</url-pattern>
</filter-mapping>

注意1:过滤器处理过滤请求的顺序:可以通过web.xml的配置顺序来配置。
注意2:过滤器的过滤路径可以使用目录过滤路径(eg:/images/*),也可以使用资源类型
过滤(eg:"*.jpg");但是不能将两者混用!

三:编码过滤
在需要设置编码的目录添加过滤器,在过滤器中设置编码:
req.setCharacterEncoding("utf-8"); // 设置编码
filterChain.doFilter(req,resp); // 放行

四:登录验证
给需要验证是否登录的页面目录,添加过滤器:
if(request.getSession().getAttribute("uname")!=null){ // 登录成功
filterChain.doFilter(request,response); // 放行
}else{
// 说明未登录
}

五:实现日志(Log)
在过滤器中使用IO流向日志文件中写入操作资源的相关情况。
在init中,获取输出流:
PrintWriter pw=new PrintWriter(new File(appRoot,logFileName));

在doFilter(xxx)方法中记录日志:
HttpServletRequest httpServletRequest=(HttpServletRequest)req;
String uri=httpServletRequest.getRequestURI();
pw.println(new Date()+"访问了"+uri+"资源"); // 写入日志文件
pw.flush(); // 强制刷新缓冲区
filterChain.doFilter(req, resp);

六:资源保护
判断网站来路(referer):
String referer=httpServletRequest.getHeader("referer");
if(referer!=null){
// 有来路(从别的页面链接而来)
filterChain.doFilter(req, resp); // “放行”
}else{
// 无网站来路,
}


Filter(过滤器)

标签:缓冲   静态   释放   images   getattr   设置   配置   void   file   

原文地址:http://www.cnblogs.com/mingmng/p/6597426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!