当前位置: 首页 > news >正文

网站建设开发计入二级科目明细免费注册域名网站

网站建设开发计入二级科目明细,免费注册域名网站,二手网站哪些做的比较好,建设网站 软件问题背景 HttpServletRequest.getReader() HttpServletRequest.getInputStream() 不能在过滤器中读取一次二进制流(字符流),又在另外一个Servlet中读取一次,即一个InputSteam(BufferedReader)对象在被读取完成后,将无…

问题背景

HttpServletRequest.getReader()
HttpServletRequest.getInputStream() 不能在过滤器中读取一次二进制流(字符流),又在另外一个Servlet中读取一次,即一个InputSteam(BufferedReader)对象在被读取完成后,将无法再次被读取。二进制流被读取后,字节流/字符流的下标将发生变化,假如程序中重新调用一遍getReader/getInputStream 将会提示异常
在这里插入图片描述

解决方案

思路很简单,既然HttpServletRequest的请求体无法通过getReader/getInputStream再次调用,那我们只需要包装一层,通过Wrapper对象去集成HttpServletRequest的所有能力,并将请求体抽离出来,这样每次读取我们定义的请求体,问题就解决了。这个方法非常灵活。

画个流程图给大家解释下
在这里插入图片描述

通过上述流程图,可以得到关键的两个信息
1、定义包装类HttpServletRequestWrapper
2、全局过滤器filter,把HttpServletRequest包装成

ps:幸好的是,java语言设计者也考虑到了这种场景,已经帮我们准备好Wrapper类,直接集成使用即可。
在这里插入图片描述

代码示例

包装类定义(RepeatedlyReadRequestWrapper.java)

package com.whale.finance.filter;import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;/*** @author yanyq* @desc 重复读取HttpServletRequest reader/inputstream* @date 2023/7/27*/
public class RepeatedlyReadRequestWrapper extends HttpServletRequestWrapper {private final String body;/**** @param request*/public RepeatedlyReadRequestWrapper(HttpServletRequest request) throws IOException {super(request);StringBuilder sb = new StringBuilder();InputStream ins = request.getInputStream();BufferedReader isr = null;try{if(ins != null){isr = new BufferedReader(new InputStreamReader(ins));char[] charBuffer = new char[128];int readCount;while((readCount = isr.read(charBuffer)) != -1){sb.append(charBuffer,0,readCount);}}}catch (IOException e){throw e;}finally {if(isr != null) {isr.close();}}sb.toString();body = sb.toString();}@Overridepublic BufferedReader getReader() {return new BufferedReader(new InputStreamReader(this.getInputStream()));}@Overridepublic ServletInputStream getInputStream() {final ByteArrayInputStream byteArrayIns = new ByteArrayInputStream(body.getBytes());ServletInputStream servletIns = new ServletInputStream() {@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() {return byteArrayIns.read();}};return  servletIns;}
}

过滤器定义(ReadBodyHttpServletFilter.java)

package com.whale.finance.filter;import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author yanyq* @desc 重复读取HttpServletRequest reader/inputstream* @date 2023/7/27*/
@Component
@WebFilter("/*")
public class ReadBodyHttpServletFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {RepeatedlyReadRequestWrapper requestWrapper = new RepeatedlyReadRequestWrapper(httpServletRequest);filterChain.doFilter(requestWrapper, httpServletResponse);}@Overridepublic void destroy() {}
}

进行验证测试

    /*** 测试request.getReader*/@PostMapping("/list")public void test(HttpServletRequest request) {request.getReader(); // 不报错return;}

Reference
https://blog.csdn.net/feeltouch/article/details/103275416

http://www.tj-hxxt.cn/news/48783.html

相关文章:

  • python做网站服务器操作系统搜索引擎大全排名
  • 一级水蜜桃宁波seo搜索引擎优化
  • 滕州外贸网站建设seo全网营销
  • 石家庄网站建设案例现在阳性最新情况
  • 新密做网站推广常用的网络推广手段有哪些
  • 公司网站开发费用好的竞价推广托管
  • 网站错误提示页设计创新驱动发展战略
  • 网站搜索怎么做的电商运营公司
  • 为博彩做网站日入两万广告推广渠道有哪些
  • 建设眼镜网站风格免费广告推广软件
  • 怎么免费建立自己的网站步骤电脑版百度入口
  • 昆明网站建设询力鼎科技著名的营销成功的案例
  • 如何做网站直播入口我要恢复百度
  • 望牛墩镇仿做网站重庆seo关键词排名
  • html5 图片网站昆明新闻头条最新消息
  • 德阳北京网站建设网络推广方案书模板
  • 个人做房产网站国际新闻头条今日国际大事
  • dede页码的调用 网站seo是什么及作用
  • 公众号关注武汉seo搜索优化
  • 网站怎么做认证外贸网站推广服务
  • wordpress迁移不能用seo搜索优化 指数
  • 网站宣传策略制作网站费用
  • 西安专业网站建设服务好网站建设的系统流程图
  • 溧阳建设集团有限公司网站软文案例300字
  • 好的网页设计网站做网站关键词优化的公司
  • 建设配资网站有要求吗短期培训学什么好
  • 青岛网站制作永诚整站seo优化公司
  • 排版网站推荐常见的网络推广方式有哪些
  • 手机网站编程语言网站seo公司
  • 东莞seo网站建设哪家靠谱企业培训机构排名