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

建设部网站下载浙江网站建设公司地址

建设部网站下载,浙江网站建设公司地址,做设计那个素材网站最好,前端效果网站springboot过滤器、拦截器相关知识 request.getParameterNames()不会消耗HTTP请求的输入流。 当处理application/json或multipart/form-data(特别是包含文件上传时)等类型的请求体时,这些内容通常不会通过getParameter或getParameterNames等…

springboot过滤器、拦截器相关知识

request.getParameterNames()不会消耗HTTP请求的输入流。

当处理application/json或multipart/form-data(特别是包含文件上传时)等类型的请求体时,这些内容通常不会通过getParameter或getParameterNames等方法直接访问,因为这些方法主要用于处理URL编码的表单数据。需要通过getInputStream()或getReader()等方法来读取整个请求体,并将其解析为相应的数据结构(如JSON对象或MultipartFile列表)。调用getInputStream()、getReader()等来读取请求体时,读取后会被关闭或消耗,意味着你不能在同一个请求中再次调用这些方法(除非你使用了某种形式的缓存或包装机制)。

getParameterNames()和getParameter()等方法访问的是请求参数,而不是请求体本身,因此它们不会消耗请求体。

HTTP请求体在Servlet容器中通常只能被读取一次,因为ServletInputStream和BufferedReader(后者通常是通过HttpServletRequest.getReader()获得的)在读取数据后不会将读取位置重置回开始。这意味着一旦你读取了请求体,你就无法在同一个请求中再次读取它,除非你在第一次读取时就已经将内容存储起来(比如复制到一个字节数组或字符流中)。

示例:在拦截器中读取Json参数

Java配置文件
@Configuration  
public class CustomWebMvcConfig implements WebMvcConfigurer {  @Autowired  private CustomInterceptor customInterceptor;  @Override  public void addInterceptors(InterceptorRegistry registry) {  registry.addInterceptor(customInterceptor)  .addPathPatterns("/**"); // 拦截所有请求,或根据需要调整  }  @Bean  public FilterRegistrationBean<FormDataToJsonFilter> formDataToJsonFilter() {  FilterRegistrationBean<FormDataToJsonFilter> registrationBean = new FilterRegistrationBean<>();  registrationBean.setFilter(new FormDataToJsonFilter());  registrationBean.addUrlPatterns("/*"); // 拦截所有请求  return registrationBean;  }  
}
过滤器
public class FormDataToJsonFilter implements Filter {  @Override  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws IOException, ServletException {  HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;ServletRequest requestWrapper = new JsonParamRequestWrapper(httpServletRequest);filterChain.doFilter(requestWrapper, servletResponse);//   }  }
自定义的HttpServletRequestWrapper

这个包装类将允许读取请求体,并且不会阻止其他组件(如Controller)再次读取它。

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;  public class JsonParamRequestWrapper extends HttpServletRequestWrapper {  private final String body;  public JsonParamRequestWrapper (HttpServletRequest request) throws IOException {  super(request);  StringBuilder stringBuilder = new StringBuilder();  BufferedReader bufferedReader = null;  try {  InputStream inputStream = request.getInputStream();  if (inputStream != null) {  bufferedReader = new BufferedReader(new InputStreamReader(inputStream));  char[] charBuffer = new char[128];  int bytesRead = -1;  while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {  stringBuilder.append(charBuffer, 0, bytesRead);  }  }  } finally {  if (bufferedReader != null) {  bufferedReader.close();  }  }  body = stringBuilder.toString();  }  @Override  public BufferedReader getReader() throws IOException {  return new BufferedReader(new InputStreamReader(new ByteArrayInputStream(body.getBytes())));  }  @Override  public ServletInputStream getInputStream() throws IOException {  final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());  return new ServletInputStream() {  @Override  public boolean isFinished() {  return byteArrayInputStream.available() == 0;  }  @Override  public boolean isReady() {  return true;  }  @Override  public int read() throws IOException {  return byteArrayInputStream.read();  }  };  }  // Getter for the body (if needed)  public String getBody() {  return this.body;  }  
}
拦截器
@Component  
public class CustomInterceptor implements HandlerInterceptor {  private final RestTemplate restTemplate = new RestTemplate();  private final ObjectMapper objectMapper = new ObjectMapper();  @Override  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  if ("POST".equalsIgnoreCase(request.getMethod())) {  JsonParamRequestWrapper requestWrapper = new JsonParamRequestWrapper(request);String body = requestWrapper.getRequestBody();logger.info("请求体:" + body);String sign = "";String data = "";// 进行验签逻辑boolean isValid = verifySignature(sign, data);if (!isValid) {response.setStatus(HttpServletResponse.SC_FORBIDDEN);return false;}}  // 继续执行下一个拦截器或目标处理器  return true;  } // 验签方法  private boolean validateSignature(String body) {  // 验签逻辑  return true; }  }
http://www.dtcms.com/wzjs/596331.html

相关文章:

  • 肇庆住房和城乡建设局网站哔哩哔哩网页版打不开
  • 网站编辑 seo是什么 百度知道深圳网站开发建设培训机构
  • 地区性门户网站是什么意思地区网站建设
  • 易名网seo好wordpress主题
  • 甲蛙网站建设wordpress 发布到iis
  • 长沙市制作网站网站开发从入门到精通
  • 陕西网站建设多少钱WordPress安装aplayer
  • wordpress如何做站群上海 网站备案系统
  • 加强网站互动交流平台建设自查眉山建设中等职业技术学校 网站
  • 企业简介模板图片北京公交yy优化
  • wordpress图片切换如何来做网站优化
  • 东莞网站外包百度浏览器
  • 青岛移动网站建设南京一对一网站建设
  • 网站定制哪家比较好网站空间租用多少钱
  • 小程序官方开发文档烟台seo网站排名优化
  • 网页建设与网站设计心德体会网站建设设计流程图
  • 做网站文件下载wordpress中dw是什么
  • 马洪旭 做的网站大学论述网站建设整个流程
  • 手机网站吧软件前端开发
  • 学企业管理培训班山东seo推广
  • 品牌网站制作流程wordpress登陆才能访问
  • 公司网站百度小程序开发哈尔滨市城乡建设局官网
  • 百度站长工具网站提交怎么增加网站浏览量
  • 无锡网站改版多少钱零售商城
  • 中卫建设厅网站网站建设与维护大作业
  • 商城式网站具备哪些功能吗网络营销推广计划
  • 建一个购物网站大约多少钱鱼台县建设局网站
  • 百色网站免费建设深圳物流公司排名
  • 服务器做网站移动端网站搭建
  • 寻找电子商务网站建设海口 网站开发