黑马程序员技术交流社区

标题: Filter-过滤器的使用详解 [打印本页]

作者: 别想太多    时间: 2015-5-24 11:51
标题: Filter-过滤器的使用详解
Java过滤器-Filter过滤器的使用
过滤是SERVLET2。3规范新有的功能,目前TOMCAT4,WEBLOGIC7都已支持。它能实现很多以前使用不便或很难实现的功能,在产品体系中,我们可以很好地使用SERVLET过滤,使得各个部件可以在保持系统统一权限控制的前提下,来实现各个独自的个性权限系统。
一、使浏览器不缓存页面的过滤器   
  1. import javax.servlet.*;   
  2. import javax.servlet.http.HttpServletResponse;   
  3. import java.io.IOException;   
  4. /**   
  5. * 用于的使 Browser 不缓存页面的过滤器   
  6. */   
  7. public class ForceNoCacheFilter implements Filter {   
  8.    
  9. public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException   
  10. {   
  11.     ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");   
  12.     ((HttpServletResponse) response).setHeader("Pragma","no-cache");   
  13.     ((HttpServletResponse) response).setDateHeader ("Expires", -1);   
  14.     filterChain.doFilter(request, response);   
  15. }   
  16. public void destroy()   
  17. {   
  18. }   
  19.       public void init(FilterConfig filterConfig) throws ServletException   
  20. {   
  21. }   
  22. }   
复制代码
二、检测用户是否登陆的过滤器
1.写个过滤器
  1. mport javax.servlet.Filter;   
  2. import javax.servlet.FilterConfig;   
  3. import javax.servlet.ServletException;   
  4. import javax.servlet.ServletRequest;   
  5. import javax.servlet.ServletResponse;   
  6. import javax.servlet.FilterChain;   
  7. import java.io.IOException;   
  8. import javax.servlet.http.HttpServletRequest;   
  9. import javax.servlet.http.HttpSession;   
  10. import javax.servlet.http.HttpServletResponse;
  11. public class RightFilter   
  12.     implements Filter {   
  13.   public void init(FilterConfig filterConfig) throws ServletException {   
  14.   }
  15.   public void doFilter(ServletRequest request, ServletResponse response,   
  16.                        FilterChain chain) throws IOException, ServletException {   
  17.     HttpServletRequest req = (HttpServletRequest) request;   
  18.     HttpServletResponse res = (HttpServletResponse) response;
  19.     HttpSession session = req.getSession(true);
  20.     //从session里取的用户名信息   
  21.     String username = (String) session.getAttribute("username");
  22.     //判断如果没有取到用户信息,就跳转到登陆页面   
  23.     if (username == null || "".equals(username)) {   
  24.       //跳转到登陆页面   
  25.       res.sendRedirect("http://"+req.getHeader("Host")+"/login.jsp");   
  26.     }   
  27.     else {   
  28.       //已经登陆,继续此次请求   
  29.       chain.doFilter(request,response);   
  30.     }   
  31.   }   
  32. public void destroy() {   
  33.   }   
  34. }   
复制代码
2.然后在web.xml里配置需要登陆权限验证的JSP文件:   
a.如果是某个具体的JSP文件(如a.jsp)需要登陆验证
<web-app>
<filter>
    <filter-name>right</filter-name>
    <filter-class>com.taihuatalk.taihua.common.RightFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>right</filter-name>
    <url-pattern>/a.jsp</url-pattern>
  </filter-mapping>
</web-app>
   b.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:
<web-app>
  <filter>
    <filter-name>right</filter-name>
    <filter-class>com.taihuatalk.taihua.common.RightFilter</filter-class>
  </filter>
<filter-mapping>
    <filter-name>right</filter-name>
    <url-pattern>/a/*</url-pattern>
  </filter-mapping>
</web-app>
三、字符编码的过滤器   
  1. import javax.servlet.*;   
  2. import java.io.IOException;
  3. /**   
  4. * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题   
  5. */   
  6. public class CharacterEncodingFilter   
  7. implements Filter   
  8. {   
  9. protected FilterConfig filterConfig = null;   
  10. protected String encoding = "";
  11. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException   
  12. {   
  13.           if(encoding != null)   
  14.            servletRequest.setCharacterEncoding(encoding);   
  15.           filterChain.doFilter(servletRequest, servletResponse);   
  16. }
  17. public void destroy()   
  18. {   
  19.     filterConfig = null;   
  20.     encoding = null;   
  21. }
  22.       public void init(FilterConfig filterConfig) throws ServletException   
  23. {   
  24.            this.filterConfig = filterConfig;   
  25.           this.encoding = filterConfig.getInitParameter("encoding");
  26. }   
  27. }   
复制代码
2、在web.xml中做一些设置
<filter>
     <filter-name>code</filter-name>
     <filter-class>CharacterEncodingFilter</filter-class>
<init-param>
     <param-name>encoding</param-name>
     <param-value>GBK</param-value>
</init-param>
</filter>
  <filter-mapping>
     <filter-name>code</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>

servlet过滤器的执行顺序就是servlet过滤器在web.xml里面映射文件filter-mapping的顺序







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2