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() {
    
        }
    }
  • 相关阅读:
    Java锁---偏向锁、轻量级锁、自旋锁、重量级锁
    Java自旋锁
    设计模式的原则
    CGLIB介绍与原理(通过继承的动态代理)
    Android Messenger
    Android AIDL的用法
    长连接和短连接和推送
    Java对称加密算法
    Android 热修复技术中的CLASS_ISPREVERIFIED问题
    Java类加载器
  • 原文地址:https://www.cnblogs.com/duguangming/p/10758700.html
Copyright © 2011-2022 走看看