解决在Filter中读取Request中的流后, 然后再Control中读取不到的做法
2017-05-17 00:00
369 查看
前段时间在开发中遇到这个问题,在网上搜索找到了解决方法,
在Filter中的处理
在Filter中的处理
public class SessionFilter extends GenericFilterBean { private static Logger log = LoggerFactory.getLogger(SessionFilter.class); @Override public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 为了避免此次读取request流后面control读取不到 HttpServletRequest request = (HttpServletRequest) req; HttpServletRequest requestWrapper = new BodyReaderHttpServletRequestWrapper(request); 。。。业务代码 if(null == requestWrapper) { chain.doFilter(request, response); } else { chain.doFilter(requestWrapper, response); } } } }
package com.szkingdom.jros.va.util; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Enumeration; /** * Created by zengh on 2017/5/17. */ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { private final byte[] body; public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException { super(request); Enumeration e = request.getHeaderNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String value = request.getHeader(name); } body = HttpHelper.getBodyString(request).getBytes(Charset.forName("UTF-8")); } @Override public BufferedReader getReader() throws IOException { return new BufferedReader(new InputStreamReader(getInputStream())); } @Override public ServletInputStream getInputStream() throws IOException { final ByteArrayInputStream bais = new ByteArrayInputStream(body); return new ServletInputStream() { @Override public int read() throws IOException { return bais.read(); } }; } @Override public String getHeader(String name) { return super.getHeader(name); } @Override public Enumeration<String> getHeaderNames() { return super.getHeaderNames(); } @Override public Enumeration<String> getHeaders(String name) { return super.getHeaders(name); } }
package com.szkingdom.jros.va.util; import javax.servlet.ServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; /** * Created by zengh on 2017/5/17. */ public class HttpHelper { /** * 获取请求Body * * @param request * @return */ public static String getBodyString(ServletRequest request) { StringBuilder sb = new StringBuilder(); InputStream inputStream = null; BufferedReader reader = null; try { inputStream = request.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8"))); String line = ""; while ((line = reader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); } }
相关文章推荐
- 解决在Filter中读取Request中的流后, 然后再Control中读取不到的做法
- 解决在Filter中读取Request中的流后, 然后再Control中读取不到的做法
- 解决在Filter中读取Request中的流后, 然后再Control中读取不到的做法
- 解决在Filter中读取Request中的流后, 然后在Controller中@RequestBody的参数无法注入而导致 400 错误
- 解决在Filter中读取Request中的流后,后续controller或restful接口中无法获取流的问题
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- 解决在Filter中读取Request中的流后,后续controller或restful接口中无法获取流的问题
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
- HttpContext.Current.Request.Files后台取不到值的解决方法 [转]
- C#读取Excel表中的数据时,有些字段内容读取不到的解决办法
- Request读取中文数据乱码的原因,以及解决办法
- fgetcsv在Linux读取不到中文的解决办法
- HttpContext.Current.Request.Files后台取不到值的解决方法
- 使用filter解决request.getParameter的中文乱码问题
- HttpContext.Current.Request.Files后台取不到值的解决方法
- 使用eclipse export打jar包,web工程使用*读取配置读不到的问题解决方法
- pom.xml 中properties 在别的配置文件中读取不到的解决方法
- 数据库连接方式读取不到Excel数据值的解决方法