1.中文乱码过滤器。get和set中文字体的设置
public class AllCharacterEncodingFilter implements Filter { private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)resp; //获取配置的过滤器参数encoding的值:如果没有,给定一个默认值 String encoding = filterConfig.getInitParameter("encoding"); if(encoding==null) encoding = "UTF-8"; //设置POST请求方式的中文请求参数的编码 request.setCharacterEncoding(encoding); //设置响应输出时的编码:字符流和字节流 response.setCharacterEncoding(encoding);//字节流输出时通知客户端的解码码表 response.setContentType("text/html;charset="+encoding);//字节流输出时通知客户端的解码码表;字符流:字符流输出时使用的码表及通知客户端解码用的码表 MyHttpServletRequest mrequest = new MyHttpServletRequest(request); //放行 chain.doFilter(mrequest, response); } public void destroy() { } } //使用包装类设计模式 //HttpServletRequestWrapper内部的代码与连接池原理中那个默认适配器一样 class MyHttpServletRequest extends HttpServletRequestWrapper{ public MyHttpServletRequest(HttpServletRequest request){ super(request); } //只对get请求方式进行改写 public String getParameter(String name) { String value = super.getParameter(name); if(value==null) return value; //得到请求方式 String method = super.getMethod(); if("get".equalsIgnoreCase(method)){ try { value = new String(value.getBytes("ISO-8859-1"),super.getCharacterEncoding()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return value; } }
2.脏话过滤器
public class DirtyWordsFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)resp; DirtyWordsHttpServletRequest drequest = new DirtyWordsHttpServletRequest(request); chain.doFilter(drequest, response); } public void init(FilterConfig filterConfig) throws ServletException { } } class DirtyWordsHttpServletRequest extends HttpServletRequestWrapper{ private String words[] = {"傻B","畜生","禽兽"}; public DirtyWordsHttpServletRequest(HttpServletRequest request){ super(request); } @Override public String getParameter(String name) { String value = super.getParameter(name); if(value==null) return "木有"; for(String dword:words){ if(value.contains(dword)){//判断用户输入的内容中包含脏话 value = value.replace(dword, "**"); } } return value; } }
3. HTML特殊标记过滤器
//HTML标记过滤器:< < public class HtmlFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)resp; HtmlHttpServletRequest hrequest = new HtmlHttpServletRequest(request); chain.doFilter(hrequest, response); } public void init(FilterConfig filterConfig) throws ServletException { } } class HtmlHttpServletRequest extends HttpServletRequestWrapper{ public HtmlHttpServletRequest(HttpServletRequest request){ super(request); } @Override public String getParameter(String name) { String value = super.getParameter(name); if(value==null) return value; value = htmlFilter(value);//完成标记过滤 return value; } private String htmlFilter(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()); } }
web.xml中配置
<filter> <filter-name>AllCharacterEncodingFilter</filter-name> <filter-class>cn.itcast.filter.AllCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>AllCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>DirtyWordsFilter</filter-name> <filter-class>cn.itcast.filter.DirtyWordsFilter</filter-class> </filter> <filter-mapping> <filter-name>DirtyWordsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>HtmlFilter</filter-name> <filter-class>cn.itcast.filter.HtmlFilter</filter-class> </filter> <filter-mapping> <filter-name>HtmlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter>
过滤器和包装类设计模式的应用
时间: 2024-10-10 22:40:04