• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Filter中获取传递参数方式(解决post请求参数问题)

java 搞代码 4年前 (2022-01-05) 23次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了Filter中获取传递参数方式(解决post请求参数问题),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Filter中获取传递参数

1. GET 传递

参数可以直接通过request.getParameter获取。

2. Post 传递

产生不能过直接从request.getInputStream() 读取,必须要进行重新写。(request.getInputStream()只能够读取一次)

方式:

通过重写 HttpServletRequestWrapper 类 获取getInputStream中的流数据,然后在将body数据进行重新写入传递下去。

XyRequestWrapper 类

 package com.xy.boot.cmiap.filter; import com.alibaba.fastjson.JSONObject; import com.xy.boot.common.util.StringUtils; import org.apache.catalina.servlet4preview.http.HttpServletRequestWrapper; import org.apache.commons.codec.Charsets; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; /** * Created by fuwenshen * Date:2018/10/26 * Time:12:21 */ public class XyRequestWrapper extends HttpServletRequestWrapper { private String body; public XyRequestWrapper(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,"UTF-8")); char[] charBuffer = new char[128]; int bytesRead = -1; while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { stringBuilder.append(charBuffer, 0, bytesRead); } } else { stringBuilder.append(""); } } catch (IOException ex) { throw ex; } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException ex) { throw ex; } } } body = stringBuilder.toString(); } @Override public ServletInputStream getInputStream() throws IOException { final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes("UTF-8")); ServletInputStream servletInputStream = new ServletInputStream() { @Override public boolean isFinished() { return false; } @Override public boolean isReady() { return false; } @Override public void setReadListener(ReadListener readListener) { } @Override public int read() throws IOException { return byteArrayInputStream.read(); } }; return servletInputStream; } @Override public BufferedReader getReader() throws IOException { return new BufferedReader(new InputStreamReader(this.getInputStream(), Charsets.UTF_8)); } public String getBody() { return this.body; } @Override public String getParameter(String name) { return super.getParameter(name); } @Override public Map getParameterMap() { return super.getParameterMap(); } @Override public Enumeration getParameterNames() { return super.getParameterNames(); } @Override public String[] getParameterValues(String name) { return super.getParameterValues(name); } /** * 设置自定义post参数 // * * @param paramMaps * @return */ public void setParamsMaps(Map paramMaps) { Map paramBodyMap = new HashMap(); if (!StringUtils.isEmpty(body)) { paramBodyMap = JSONObject.parseObject(body, Map.class); } paramBodyMap.putAll(paramMaps); body = JSONObject.toJSONString(paramBodyMap); } }

XySecurityFilter

 package com.xy.boot.cmiap.filter; import com.alibaba.fastjson.JSONObject; import com.xy.boot.cmiap.bo.VerifyTokenResultBO; import com.xy.boot.cmiap.constant.HttpConstant; import com.xy.boot.cmiap.entity.enums.XyHttpCodeEnum; import com.xy.boot.cmiap.service.IXySecurityService; import com.xy.boot.cmiap.service.helper.XyHttpSecurityHelper; import com.xy.boot.common.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaT

来源gaodai.ma#com搞##代!^码@网

ype; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; /** * Created by fuwenshen * Date:2018/10/29 * Time:15:36 */ @Component @Slf4j @WebFilter(filterName = "xySecurityFilter", urlPatterns = {"/api/adv/*"}) public class XySecurityFilter implements Filter { @Value("${verify_token_switch}") private boolean tokenSwitch; @Value("${zy.app_secret}") privat

以上就是Filter中获取传递参数方式(解决post请求参数问题)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Filter中获取传递参数方式(解决post请求参数问题)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址