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("<"); break; case '>': result.append(">"); break; case '&': result.append("&"); break; case '"': result.append("""); break; default: result.append(content[i]); } } return (result.toString()); }}
FR:徐海涛(hunk xu) QQ技术交流群:386476712
1 0
- Filter集锦 (Java web 过滤器)
- JAVA WEB FILTER(过滤器)
- Java-web Filter过滤器
- Java web----过滤器(Filter)
- java web 过滤器filter
- Java Web 乱码过滤器 filter
- Java Web中的过滤器Filter
- java-WEB中的过滤器Filter
- Java Web中的过滤器Filter
- JAVA Web 中的过滤器Filter
- 10036---Java Web--Filter(过滤器)
- java-WEB中的过滤器Filter
- Java Web--Seervlet之过滤器(Filter)
- JAVA WEB过滤器Filter使用总结
- Java Web 之过滤器Filter详解
- Java Web 之过滤器Filter详解
- [filter] Java web 中过滤器的配置
- Java Web——Filter过滤器
- Android超过Windows成为网络第一操作系统
- fibonacii数列(斐波那契数列)的递归实现及循环实现
- 什么是IL
- 160
- 方法重写和方法重载的区别?this关键字和super关键字分别代表什么?
- Filter集锦 (Java web 过滤器)
- 告别!Ubuntu停止发布手机软件
- PHP设计模式系列(三):代理模式
- Let's Encrypt 颁发15000 份欺诈安全证书
- 使用TwinklingRefreshLayout开源框架采坑
- 九九乘法表
- 链表14:链表指定值清除
- Eclipse设置字体及输入提示方式
- Centos7安装OpenJDK8