过滤器Filter实用实例

来源:互联网 发布:叮叮当卖家版软件 编辑:程序博客网 时间:2024/06/03 21:36

一、日志记录过滤器

功能描述:通过日志记录过滤器记录应用中被访问资源的URL以及时间。因此,可以用来统计被访问最多的资源及其时间

设计:

1.过滤器名称:LoggingFilter

初始化参数:filterName="log.txt" path="E:/"  --指定存储位置

访问前缀:prefix = "URI:" --虚拟的URI

2.方法说明:

init()方法,用户初始化数据
doFilter()方法,用户实现相应的业务逻辑
destory()方法,用户清理资源


3.源代码

package filter;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;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.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;import javax.servlet.http.HttpServletRequest;@WebFilter(filterName = "LoggingFilter", urlPatterns = { "/*" },        initParams = {                @WebInitParam(name = "logFileName",                        value = "log.txt"),                @WebInitParam(name = "prefix", value = "URI: ") })public class LoggingFilter implements Filter {    private PrintWriter logger;    private String prefix;    @Override    public void init(FilterConfig filterConfig)            throws ServletException {        prefix = filterConfig.getInitParameter("prefix");        String logFileName = filterConfig                .getInitParameter("logFileName");        String appPath = filterConfig.getServletContext()                .getRealPath("/");        // without path info in logFileName, the log file will be        // created in $TOMCAT_HOME/bin        System.out.println("logFileName:" + logFileName);        try {            logger = new PrintWriter(new File(appPath,                    logFileName));        } catch (FileNotFoundException e) {            e.printStackTrace();            throw new ServletException(e.getMessage());        }    }    @Override    public void destroy() {        System.out.println("destroying filter");        if (logger != null) {            logger.close();        }    }    @Override    public void doFilter(ServletRequest request,            ServletResponse response, FilterChain filterChain)            throws IOException, ServletException {        System.out.println("LoggingFilter.doFilter");        HttpServletRequest httpServletRequest =                 (HttpServletRequest) request;        logger.println(new Date() + " " + prefix                + httpServletRequest.getRequestURI());        logger.flush();        filterChain.doFilter(request, response);    }}


二、图片保护过滤器

1.功能描述:通过图片保护过滤器,可以阻止外界直接通过地址栏输入图片URL访问图片。

原因:直接访问图片时,请求头部(Header)中referer为空,当 被引用时,该referer不为空

2.过滤器:ImageProtectorFilter
初始化参数:无
映射路径:*.jpg,*.png,*.gif

3.源代码:

package 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.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;@WebFilter(filterName="ImageProtectorFilter", urlPatterns={"*jpg", "*.png", "*.gif"})public class ImageProtectorFilter implements Filter {public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest)request;String referer = httpServletRequest.getHeader("referer");if(referer != null){filterChain.doFilter(request, response);}else{new ServletException("Image not available");}}public void init(FilterConfig arg0) throws ServletException {}}


三、总结

过滤器可以对我们用户的请求进行拦截,对于不合理的请求进行过滤。因此,可用于用户登录验证,下载计数,图片保护,日志记录的功能。



0 0
原创粉丝点击