zoukankan      html  css  js  c++  java
  • 过滤器Filter

    使用背景:

      一个项目中需要做多次需求判断时,例如商城中加入购物车需要登陆判断,我的购物车需要需求判断,我的 订单、我的收藏等等,都需要做是否登陆判断,就可以使用过滤器,把这些需求过滤下来。

    使用步骤:

      1 创建一个包 com.xxx.filter
      2 在包中创建一个类 实现 Filter接口和三个实现方法
      3 在 doFilter中

     @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
    // 设置编码方式
    req.setCharacterEncoding("UTF-8");
    filterChain.doFilter(req,resp);//放行
    }

    4 在 web.xml配置

    <filter>
            <filter-name>dd</filter-name>
            <filter-class>com.guangming.filter.CharacterEncodingFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>dd</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

      /* 所有请求都过滤
      /emp/* 过滤 emp下所有请求 
      *.do 过滤所有以.do结尾的请求

    5.过滤器代码

    @WebFilter("*.do")//拦截需要进行登陆校验的请求   加入购物车和我的购物车(addCart.do/myCart.do)
    public class LoginFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        /*判断是否登陆*/
            //为什么强转成HttpServlet: ServletRequest没有getSession().setAttribute方法
            HttpServletRequest req= (HttpServletRequest) request;
            HttpServletResponse resp= (HttpServletResponse) response;
    
            Object user = req.getSession().getAttribute("user");
            if (user==null){
                //session中没有获取到用户信息,证明没有登陆,则跳转到登陆界面
                resp.sendRedirect("/shop/views/login.jsp");
            }else {
                /*不加else,未放行,界面加载不出来*/
                //session中获取到了用户信息,证明已经登陆,则放行
                filterChain.doFilter(req,resp);
            }
        }
    
        @Override
        public void destroy() {
    
        }
    }
  • 相关阅读:
    学习官方示例 System.Assigned
    用 TBytesStream 类实现的读文件为十六进制字符的函数
    学习官方示例 System.Hi、System.Lo
    给 TComboBox 添加图标 回复 "heyongan" 的问题
    [每周特惠]WPF编程(第二版) + 设计模式—基于C#的工程化实现及扩展
    【公告】8月28日(周六)早上5:007:00服务器升级
    【网站公告】新Web服务器上线
    欢迎参加上海张江浦东软件园以及分园的技能培训课程
    上周热点回顾(8.309.5)
    上周热点回顾(8.168.22)
  • 原文地址:https://www.cnblogs.com/duguangming/p/10758700.html
Copyright © 2011-2022 走看看