Filter过滤器

末蓝、 2022-04-10 06:24 465阅读 0赞

一、Filter过滤器

1、介绍

  1. Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态资源文件等进行拦截,从而实现一些特殊的功能。例如实现URL的权限访问控制、过滤敏感词汇、压缩响应信息等功能。
  2. 它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。

2、Filter开发步骤:
1)编写java类实现Filter接口,并实现其doFilter方法。
2)在web.xml文件中注册filter类,并设置它所能拦截的资源

  1. 使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

3、Filter的生命周期

  1. 1)服务器启动时,web服务器创建Filter的实例对象,并调用其init方法,完成对象的初始化功能。filter对象只会创建一次,init方法也只会执行一次。
  2. 2)拦截到请求时,执行doFilter方法。可以执行多次。
  3. 3)服务器关闭时,web服务器销毁Filter的实例对象。

二、简单Demo

1、filter类

  1. public class EncodeFilter implements Filter{
  2. private String encode;
  3. @Override
  4. public void destroy() {
  5. // TODO Auto-generated method stub
  6. }
  7. @Override
  8. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
  9. throws IOException, ServletException {
  10. HttpServletRequest request = (HttpServletRequest) req;
  11. HttpServletResponse response = (HttpServletResponse) resp;
  12. //设置编码
  13. request.setCharacterEncoding("UTF-8");
  14. response.setCharacterEncoding("UTF-8");
  15. //禁用浏览器缓存
  16. response.setHeader("Cache-Control", "no-cache");
  17. response.setHeader("Pragma", "no-cache");
  18. response.setDateHeader("Expires", -1);
  19. //放行通过,如果后续还有其它过滤器,则进入到下一个过滤器,如果没有其它过滤器了,则到达目标访问资源
  20. chain.doFilter(req, resp);
  21. }
  22. @Override
  23. public void init(FilterConfig filterConfig) throws ServletException {
  24. encode = filterConfig.getInitParameter("encode");
  25. System.out.println(encode);
  26. }
  27. }
  28. public class AuthFilter implements Filter{
  29. @Override
  30. public void destroy() {
  31. }
  32. @Override
  33. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
  34. throws IOException, ServletException {
  35. HttpServletRequest request = (HttpServletRequest) req;
  36. HttpServletResponse response = (HttpServletResponse) resp;
  37. String path = request.getServletPath();
  38. System.out.println("path="+path);
  39. String uri = request.getRequestURI().toLowerCase();
  40. System.out.println("uri="+uri);
  41. //对uri进行一些判断操作
  42. if (UrlUtils.isDynamicUrl(uri) && !UrlUtils.isNoLoginUrl(uri)) {
  43. // 判断用户是否登录
  44. Object user = request.getSession().getAttribute("user");
  45. if (user == null) {// 未登录,响应登录界面
  46. response.sendRedirect(request.getContextPath() + "/login.jsp");
  47. return;
  48. }
  49. }else {
  50. chain.doFilter(req, resp);
  51. }
  52. }
  53. @Override
  54. public void init(FilterConfig filterConfig) throws ServletException {
  55. // TODO Auto-generated method stub
  56. }
  57. }

2、web.xml 注册filter类

  1. <filter>
  2. <filter-name>EncodeFilter</filter-name>
  3. <filter-class>cn.jq.myservlet.filter.EncodeFilter</filter-class>
  4. <init-param>
  5. <param-name>encode</param-name>
  6. <param-value>UTF-8</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>EncodeFilter</filter-name>
  11. <url-pattern>/*</url-pattern> <!-- 拦截所有的资源 -->
  12. </filter-mapping>
  13. <filter>
  14. <filter-name>AuthFilter</filter-name>
  15. <filter-class>cn.jq.myservlet.filter.AuthFilter</filter-class>
  16. </filter>
  17. <filter-mapping>
  18. <filter-name>AuthFilter</filter-name>
  19. <url-pattern>/*</url-pattern>
  20. </filter-mapping>

三、Filter对象——FilterConfig

  1. web.xml注册filter时,可使用<init-param>为filter配置一些初始化参数,当web容器实例化Filter对象,调用其 init方法获取参数。

filterConfig对象的方法:

  1. 1String getFilterName():得到filter的名称。
  2. 2String getInitParameter(String name):返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
  3. 3Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
  4. 4public ServletContext getServletContext():返回Servlet上下文对象的引用。

四、过滤器链——FilterChain

  1. 一个web应用中可以注册多个过滤器对某些web资源进行拦截,这些过滤器就称为过滤器链。
  2. **1、过滤器链作用:**
  3. 当一个filter收到请求的时候,调用chain.doFilter才可以访问下一个匹配的filter,若当前的filter是最后一个filter,调用chain.doFilter才能访问目标资源

2、过滤器链的执行顺序:

  1. 多个filter的执行顺序是由web.xml filter-mapping的位置顺序决定(**谁在前先执行谁)**。
  2. [java web 过滤器跟拦截器的区别和使用][java web]

ends~

发表评论

表情:
评论列表 (有 0 条评论,465人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Filter 过滤器

    Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。 1.什么是Filter及其作用介绍      Filter是sun公司中servlet2.3后增加的一

    相关 Filter过滤器

    Filter的基本功能是对servlet容器调用servlet的过程进行拦截,从而在servlet进行响应处理的前后实现一些特殊的功能。 在servletAPI中定义了三个接

    相关 Filter过滤器

    过滤器: 过滤   过滤请求 可以写多个 从用户访问  ->第一个过滤器  -> 第二个过滤 -> servlet   生命周期:随着项目的启动而创建 当访问了地址后而

    相关 Filter过滤器

    一、Filter过滤器 1、介绍       Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态资源文件等进行

    相关 Filter 过滤器

    > 过滤器,其实就是对客户端发出来的请求进行过滤。浏览器发出,然后服务器派Servlet处理。在中间就可以过滤,其实过滤器起到的是拦截的作用,也就是拦截器。 作用