• SpringBoot中使用过滤器Filter


    场景:API的参数都是经过加密的,于是在过滤器中,将获取到的请求的参数先解密再去进行处理

    一、实现Filter接口

    public class TestFilter implements Filter {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            logger.info("TestFilter init");
        }
    
        @Override
        public void destroy() {
            logger.info("TestFilter destroy");
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            HttpServletResponse httpServletResponse = (HttpServletResponse) response;
            String servletPath = httpServletRequest.getServletPath();
    
            String body = HttpHelper.getBodyString(httpServletRequest);
            JSONObject param = JSONObject.parseObject(body);
            if (param == null) {
                logger.info("参数为空");
                return;
            }
            String data = param.getString("data");
            String time = param.getString("time");
            ServletRequestWrapper requestWrapper = new ServletRequestWrapper(httpServletRequest,
                    param.toString().getBytes(Charset.forName("UTF-8")));
    
            // 参数解密 解密过程省略
            //.............
            param.put("data", decryptParam); //将解密后的data取代加密的data
            requestWrapper.setBody(param.toString().getBytes(Charset.forName("UTF-8")));
            
             try {
                // 捕获异常
                chain.doFilter(requestWrapper, response);
            } catch (Exception e) {
                logger.error("", e);
            }
        }
    
    }        

    二、设置过滤的接口

     在TestFilter上添加 @WebFilter(filterName = "testFilter", urlPatterns = "/test/*") ,表示在test下的所有接口都经过过滤器

    三、启动过滤器

    Application中添加 @ServletComponentScan

  • 相关阅读:
    mysql的配置和安装
    ubuntu开机后无法进入桌面
    python的学习笔记(1)之json序列化的使用(2)
    python的学习笔记(1)之json序列化的使用(1)
    python的学习笔记(0)之循环的使用1
    java基础面试题10--String--统计大串中小串出现的次数
    13 ftp软件安装过程
    12 软件安装的两种方式
    rpm方式安装MySQL5.1.73
    java基础面试题9--数组高级-二分查找
  • 原文地址:https://www.cnblogs.com/JoeyWong/p/9134750.html
Copyright © 2020-2023  润新知