串联过滤器

来源:互联网 发布:戴森空气净化器 知乎 编辑:程序博客网 时间:2024/04/27 10:32

串联过滤器的简单示例:

      第一个过滤器实现对指定iP与用户名的guolv

      地隔个过滤器实现对留言部分的内容的部分词语的过滤与替换

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <display-name>NoteFilter</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>    <filter>    <filter-name>noteFilter</filter-name>    <filter-class>mypack.NoteFilter</filter-class>    <init-param>      <param-name>blacklist</param-name>      <param-value>小调皮</param-value>    </init-param>    <init-param>      <param-name>blockedIP</param-name>      <param-value>192.168</param-value>    </init-param>  </filter>  <filter-mapping>     <filter-name>noteFilter</filter-name>     <url-pattern>/note</url-pattern>  </filter-mapping>    <filter>    <filter-name>note</filter-name>    <filter-class>mypack.ReplaceTextFilter</filter-class>    <init-param>      <param-name>searchStr</param-name>      <param-value>暴力</param-value>    </init-param>    <init-param>      <param-name>replaceStr</param-name>      <param-value>和平</param-value>    </init-param>  </filter>    <filter-mapping>    <filter-name>note</filter-name>    <url-pattern>/note</url-pattern>  </filter-mapping>    <servlet>    <servlet-name>note</servlet-name>    <servlet-class>mypack.Note</servlet-class>  </servlet>  <servlet-mapping>     <servlet-name>note</servlet-name>     <url-pattern>/note</url-pattern>  </servlet-mapping></web-app>

NoteFilter.java

package mypack;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;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;public class NoteFilter implements Filter{private FilterConfig config;private String blacklist;private String blockedIP;@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubSystem.out.println("Filter is servicing!");if(isBlockedAddress(req,resp)) return;if(isBlackList(req,resp)) return;long before = System.currentTimeMillis();config.getServletContext().log("即将进行过滤器调用");chain.doFilter(req, resp);config.getServletContext().log("已经进行了过滤器的调用");long after = System.currentTimeMillis();String name="";if(req instanceof HttpServletRequest)name=((HttpServletRequest) req).getRequestURI();config.getServletContext().log("NoteFilter :"+name+"花费了"+(after-before)+"ms");}private boolean isBlackList(ServletRequest req, ServletResponse resp) throws IOException {// TODO Auto-generated method stubString username = req.getParameter("username");if(username!=null)username=new String(username.getBytes("ISO-8859-1"),"utf-8");if(username!=null&&username.indexOf(blacklist)!=-1){resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print("<h1>"+username+"对不起您没有权限留言</h1>");writer.flush();return true;}return false;}private boolean isBlockedAddress(ServletRequest req, ServletResponse resp) throws IOException {// TODO Auto-generated method stubString remoteAddr = req.getRemoteAddr();if(remoteAddr.indexOf(blockedIP)==0){resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print("<h1>"+remoteAddr+"对不起您没有权限留言</h1>");writer.flush();return true;}return false;}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stubSystem.out.println("Filter init() ");this.config=config;blacklist = config.getInitParameter("blacklist");blockedIP = config.getInitParameter("blockedIP");}@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("Filter is destroyed!");}}

ReplaceTextFilter.java

package mypack;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;public class ReplaceTextFilter implements Filter{private ReplaceTextWrapper textWrapper;private String searchStr;private String replaceStr;private FilterConfig config;@Overridepublic void destroy() {// TODO Auto-generated method stubconfig.getServletContext().log("Replace Text Filter destroy!");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubReplaceTextWrapper textWrapper = new ReplaceTextWrapper(resp, searchStr, replaceStr);config.getServletContext().log("begin text Filter");chain.doFilter(req, textWrapper);config.getServletContext().log("turn next Servlet");textWrapper.getOutputStream().close();}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stubthis.config=config;searchStr=config.getInitParameter("searchStr");replaceStr=config.getInitParameter("replaceStr");config.getServletContext().log("Replace Text Filter init()");}}

ReplaceTextWrapper.java

package mypack;import java.io.IOException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;public class ReplaceTextWrapper extends HttpServletResponseWrapper{private String searchStr;private String replaceStr;private ReplaceTextStream stream;public ReplaceTextWrapper(ServletResponse response,String searchStr,String replaceStr) throws IOException {super((HttpServletResponse) response);    stream=new ReplaceTextStream(response.getOutputStream(),searchStr,replaceStr);}public ServletOutputStream getOutputStream(){return stream;}}

ReplaceTextStream.java

package mypack;import java.io.ByteArrayOutputStream;import java.io.IOException;import javax.servlet.ServletOutputStream;import javax.servlet.WriteListener;public class ReplaceTextStream extends ServletOutputStream{private ServletOutputStream out;private String searchStr;private String replaceStr;private ByteArrayOutputStream buffer=new ByteArrayOutputStream();private boolean closed=false; public ReplaceTextStream(ServletOutputStream out,String searchStr,String replaceStr) {// TODO Auto-generated constructor stub this.out=out; this.searchStr=searchStr; this.replaceStr=replaceStr;}  public void close() throws IOException{ if(!closed){ out.write(processStr(buffer.toByteArray())); out.close(); closed=true; } } public void flush() throws IOException{ if(!closed){ out.write(processStr(buffer.toByteArray())); buffer=new ByteArrayOutputStream(); } }  public void println(String s) throws IOException{ s=s+"\n"; buffer.write(s.getBytes()); }  private byte[] processStr(byte[] bytes) {// TODO Auto-generated method stub    String str = new String(bytes);    int index= str.indexOf(searchStr);    if(index!=-1){    String subStr = str.substring(0, index);    String newStr=subStr+replaceStr+str.substring(index+searchStr.length());    return newStr.getBytes();    }else{      return str.getBytes();    }}@Overridepublic boolean isReady() {// TODO Auto-generated method stubreturn out.isReady();}@Overridepublic void setWriteListener(WriteListener listener) {// TODO Auto-generated method stub}@Overridepublic void write(int b) throws IOException {// TODO Auto-generated method stub}}
Note.java

package mypack;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Note extends HttpServlet{  @Override  public void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubresp.setContentType("text/html;charset=utf-8");ServletOutputStream out = resp.getOutputStream();out.println("<html><head>留言薄<title></title></head><body>");String username = req.getParameter("username");if(username!=null)username=new String(username.getBytes("ISO-8859-1"),"utf-8");String content = req.getParameter("content");if(content!=null)content=new String(content.getBytes("ISO-8859-1"),"utf-8");if(username!=null)out.println("<p>"+username+"留言为:"+content+"</p>");out.println("<form action="+req.getContextPath()+"/note method='POST'>");out.println("姓名:<input type=text size=10 name=username /><br>");out.println("留言:<textarea name=content rows=5 cols=10></textarea><br><br>");out.println("<input type=submit value='提交'/>");out.println("</form></body></html>");  }}




0 0
原创粉丝点击