zoukankan      html  css  js  c++  java
  • spring boot 过滤器实现接收 压缩数据 并解压

    1.新加类GzipRequestWrapper 继承HttpServletRequestWrapper类

    public class GzipRequestWrapper  extends HttpServletRequestWrapper{
    
        private HttpServletRequest request;  
        private static final Logger LOGGER = LoggerFactory.getLogger(GzipRequestWrapper.class); 
    
        public GzipRequestWrapper(HttpServletRequest request) {  
            super(request);  
            this.request = request;  
        } 
    
    
        @Override  
        public ServletInputStream getInputStream() throws IOException {  
            
            ServletInputStream stream = request.getInputStream();  
            
            String contentEncoding = request.getHeader("Content-Encoding");  
            // 如果对内容进行了压缩,则解压  
            if (null != contentEncoding && contentEncoding.indexOf("gzip") != -1) {  
                try {  
                    final GZIPInputStream gzipInputStream = new GZIPInputStream(  
                            stream);  
    
                    ServletInputStream newStream = new ServletInputStream() {  
    
                        @Override  
                        public int read() throws IOException {  
                            return gzipInputStream.read();  
                        }
    
                        @Override
                        public boolean isFinished() {
                            return false;
                        }
    
                        @Override
                        public boolean isReady() {
                            return false;
                        }
    
                        @Override
                        public void setReadListener(ReadListener arg0) {
                            // TODO Auto-generated method stub
                            
                        }  
                    };  
                    return newStream;  
                } catch (Exception e) {  
                    LOGGER.debug("ungzip content fail.", e);  
                }  
            }  
            return stream;  
        }  
    
    
    }

    2.新加FilterGzip 实现 Filter(注意使用注解)

    @WebFilter(filterName="AccessFilter",urlPatterns="/")
    public class FilterGzip implements Filter {
    
        @Override
        public void destroy() {
            
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            
            System.out.println("filter");
    
            chain.doFilter(new GzipRequestWrapper((HttpServletRequest) request),  
                    response);
            
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            
        }
    
    }

    3.在启动类添加

    @Bean  
        public FilterRegistrationBean  filterRegistrationBean() {  
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();  
            FilterGzip httpBasicFilter = new FilterGzip();  
            registrationBean.setFilter(httpBasicFilter);  
            List<String> urlPatterns = new ArrayList<String>();  
            urlPatterns.add("/*");  
            registrationBean.setUrlPatterns(urlPatterns);  
            return registrationBean;  
        } 

    4.使用

    @RequestMapping(value="/info")
        public String receive(HttpServletRequest req){
            
            StringBuilder sb = null;
            String json = null;
            try {
                ServletInputStream inputStream = req.getInputStream();
    
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));   
                sb = new StringBuilder();   
    
                String line = null;   
                while ((line = reader.readLine()) != null) {   
                    sb.append(line);   
                }
                json = URLEncoder.encode(sb.toString(), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }  
            System.out.println("sb ----> " + sb.toString());
            if(sb != null){
                logger.info("**** 接收成功1条 ****");
            }
            MultiValueMap<String, String> paramMap = new LinkedMultiValueMap<>();
            paramMap.add("jsonStr", json);
            restTemplate.postForObject("http://SERVICE-DATA/pretreat", paramMap, String.class);
            
            logger.info("#### 传输 成功!####");
            
            return "ok";
        }
    欢迎指正,交流沟通,共同进步!对您有帮助的话点下推荐~~
  • 相关阅读:
    OK335xS-Android mkmmc-android-ubifs.sh hacking
    OK335xS-Android pack-ubi-256M.sh hacking
    OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
    Qt Quick Hello World hacking
    Qt QML referenceexamples attached Demo hacking
    QT 5.4.1 for Android Ubuntu QtWebView Demo
    I.MX6 working note for high efficiency
    QT 5.4.1 for Android Windows环境搭建
    mkbootimg hacking
    Generate And Play A Tone In Android hacking
  • 原文地址:https://www.cnblogs.com/gaoyawei/p/7090778.html
Copyright © 2011-2022 走看看