Filter集锦 (Java web 过滤器)

来源:互联网 发布:乾隆红楼梦 知乎 编辑:程序博客网 时间:2024/05/29 10:06

1 自动登录过滤器

package cn.itcast.web.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.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.itcast.dao.UserDao;import cn.itcast.domain.User;import cn.itcast.utils.WebUtils;public class AutoLoginFilter implements Filter {    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        if(request.getSession().getAttribute("user")!=null){            chain.doFilter(request, response);            return;        }        //1.得到用户带过来的authlogin的cookie,        String value = null;        Cookie cookies[] = request.getCookies();        for(int i=0;cookies!=null && i<cookies.length;i++){            if(cookies[i].getName().equals("autologin")){                value = cookies[i].getValue();            }        }        //2.得到 cookie中的用户名和密码         if(value!=null){            String username = value.split("\\.")[0];            String password = value.split("\\.")[1];            //3.调用dao获取用户对应的密码            UserDao dao = new UserDao();            User user = dao.find(username);            String dbpassword = user.getPassword();            //4.检查用户带过来的md5的密码和数据库中的密码是否匹配,如匹配则自动登陆            if(password.equals(WebUtils.md5(dbpassword))){                request.getSession().setAttribute("user", user);            }        }        chain.doFilter(request, response);    }    public void destroy() {        // TODO Auto-generated method stub    }    public void init(FilterConfig filterConfig) throws ServletException {        // TODO Auto-generated method stub    }}


2 字符编码过滤器

package cn.itcast.web.filter;import java.io.BufferedReader;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.security.Principal;import java.util.Enumeration;import java.util.Locale;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletInputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;//为解决全站乱码public class CharacterEncodingFilter implements Filter {    public void destroy() {        // TODO Auto-generated method stub    }    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        request.setCharacterEncoding("gb2312");        response.setCharacterEncoding("gb2312");        response.setContentType("text/html;charset=gb2312");        MyCharacterEncodingRequest requestWrapper = new MyCharacterEncodingRequest(request);        chain.doFilter(requestWrapper, response);    }    public void init(FilterConfig filterConfig) throws ServletException {        // TODO Auto-generated method stub    }}/*1.实现与被增强对象相同的接口 2、定义一个变量记住被增强对象3、定义一个构造器,接收被增强对象4、覆盖需要增强的方法5、对于不想增强的方法,直接调用被增强对象(目标对象)的方法 */class MyCharacterEncodingRequest extends HttpServletRequestWrapper{    private HttpServletRequest request;    public MyCharacterEncodingRequest(HttpServletRequest request) {        super(request);        this.request = request;    }    @Override    public String getParameter(String name) {        try{            String value= this.request.getParameter(name);            if(value==null){                return null;            }            if(!this.request.getMethod().equalsIgnoreCase("get")) {                return value;            }            value = new String(value.getBytes("ISO8859-1"),this.request.getCharacterEncoding());            return value;        }catch (Exception e) {            throw new RuntimeException(e);        }    }}


3 过滤脏话Filter

package cn.itcast.web.filter;import java.io.IOException;import java.util.Arrays;import java.util.List;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.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;//脏话过滤器public class DirtyFilter implements Filter {    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        DirtyRequest dirtyrequest = new DirtyRequest(request);        chain.doFilter(dirtyrequest, response);    }    public void init(FilterConfig filterConfig) throws ServletException {    }    public void destroy() {    }}class DirtyRequest extends HttpServletRequestWrapper{    private List<String> dirtyWords = Arrays.asList("傻B","操蛋","畜生");    private HttpServletRequest request;    public DirtyRequest(HttpServletRequest request) {        super(request);        this.request = request;    }    @Override    public String getParameter(String name) {        String value = this.request.getParameter(name);        if(value==null){            return null;        }        for(String dirtyWord : dirtyWords){            if(value.contains(dirtyWord)){                value = value.replace(dirtyWord, "****");            }        }        return value;    }}

4 全站压缩Filter

package cn.itcast.web.filter;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.util.zip.GZIPOutputStream;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;//解决全站压缩public class GzipFilter implements Filter {    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        BufferResponse myresponse = new BufferResponse(response);        chain.doFilter(request, myresponse);        //拿出缓存中的数据,压缩后再打给浏览器        byte out[] = myresponse.getBuffer();        System.out.println("原始大小:" + out.length);        ByteArrayOutputStream bout = new ByteArrayOutputStream();        GZIPOutputStream gout = new GZIPOutputStream(bout);        gout.write(out);        gout.close();        byte gzip[] = bout.toByteArray();        System.out.println("压缩后的大小:" + gzip.length);        response.setHeader("content-encoding", "gzip");        response.setContentLength(gzip.length);        response.getOutputStream().write(gzip);    }    public void destroy() {    }    public void init(FilterConfig filterConfig) throws ServletException {    }}class BufferResponse extends HttpServletResponseWrapper{    private ByteArrayOutputStream bout = new ByteArrayOutputStream();    private PrintWriter pw;    private HttpServletResponse response;    public BufferResponse(HttpServletResponse response) {        super(response);        this.response = response;    }    @Override    public ServletOutputStream getOutputStream() throws IOException {        return new MyServletOutputStream(bout);    }    @Override    public PrintWriter getWriter() throws IOException {        pw = new PrintWriter(new OutputStreamWriter(bout,this.response.getCharacterEncoding()));  //PrintWriter.write(中国) <br>        return pw;    }    public byte[] getBuffer(){        try{            if(pw!=null){                pw.close();            }            if(bout!=null){                bout.flush();                return bout.toByteArray();            }            return null;        }catch (Exception e) {            throw new RuntimeException(e);        }    }}class MyServletOutputStream extends ServletOutputStream{    private ByteArrayOutputStream bout;    public MyServletOutputStream(ByteArrayOutputStream bout){        this.bout = bout;    }    @Override    public void write(int b) throws IOException {        this.bout.write(b);    }}


8 HTML转义Filter

package cn.itcast.web.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.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;//html转义过滤器public class HtmlFilter implements Filter {    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        MyHtmlRequest myrequest = new MyHtmlRequest(request);        chain.doFilter(myrequest, response);    }    public void destroy() {        // TODO Auto-generated method stub    }    public void init(FilterConfig filterConfig) throws ServletException {        // TODO Auto-generated method stub    }}class MyHtmlRequest extends HttpServletRequestWrapper{    private HttpServletRequest request;    public MyHtmlRequest(HttpServletRequest request) {        super(request);        this.request = request;    }    @Override    public String getParameter(String name) {        String value = this.request.getParameter(name);        if(value==null){            return null;        }        return filter(value);    }     public String filter(String message) {            if (message == null)                return (null);            char content[] = new char[message.length()];            message.getChars(0, message.length(), content, 0);            StringBuffer result = new StringBuffer(content.length + 50);            for (int i = 0; i < content.length; i++) {                switch (content[i]) {                case '<':                    result.append("&lt;");                    break;                case '>':                    result.append("&gt;");                    break;                case '&':                    result.append("&amp;");                    break;                case '"':                    result.append("&quot;");                    break;                default:                    result.append(content[i]);                }            }            return (result.toString());        }}

这里写图片描述

FR:徐海涛(hunk xu) QQ技术交流群:386476712

1 0
原创粉丝点击