里面一些方法使用了hutool的工具类 可以替换成你自己习惯的 工具类不是记录的主要东西。

记录点
1.怎么创建拦截器
2.怎么统一管理拦截器是否启用和输用顺序
3.怎么获取传入的参数
4.怎么获取返回值

直接上代码===================================================

filter配置

@Configuration
public class FilterConfig {       //log拦截器启动@Beanpublic FilterRegistrationBean logFilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setDispatcherTypes(DispatcherType.REQUEST);registration.setFilter(new LogFilter());registration.addUrlPatterns("/*");registration.setName("logFilter");registration.setOrder(Integer.MAX_VALUE-1);return registration;}   }

LogFilter

/*** log过滤** @author Teler*/
public class LogFilter implements Filter {@Overridepublic void init(FilterConfig config) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)throws IOException, ServletException {//为了在post的时候能继续传递LogHttpServletRequestWrapper request = new LogHttpServletRequestWrapper((HttpServletRequest) servletRequest);MyResponseWrapper response = new MyResponseWrapper((HttpServletResponse) servletResponse);StaticLog.info("=====================LogFilter前置start=====================>");//封装log实体类Map<String, Object> parameterMap=new LinkedHashMap<>();if("GET".equals(request.getMethod())){parameterMap= JSONUtil.parseObj(ServletUtil.getParams(request));}else{parameterMap= JSONUtil.parseObj(request.getBody());}StaticLog.info("请求来源: =》{}", request.getRemoteAddr());StaticLog.info("请求URI:{}", request.getRequestURI());StaticLog.info("请求方式:{}", request.getMethod());StaticLog.info("请求参数:{}", parameterMap);StaticLog.info("=====================LogFilter前置  end=====================>");//消耗时间long start = System.currentTimeMillis();// 执行主体方法start==================================================================chain.doFilter(request, response);// 执行主体方法  end==================================================================//耗时long time = System.currentTimeMillis() - start;StaticLog.info("=====================LogFilter后置start=====================>");byte[] content=response.getContent();String resultParams=new String();if (content.length > 0) {resultParams= new String(content, "UTF-8");}StaticLog.info("返回值:{}", resultParams);StaticLog.info("耗时(毫秒):", time);//返回消息 否则前台收不到消息servletResponse.getOutputStream().write(resultParams.getBytes());StaticLog.info("=====================LogFilter后置  end=====================>");}@Overridepublic void destroy() {}
}

LogHttpServletRequestWrapper.java

public class LogHttpServletRequestWrapper extends HttpServletRequestWrapper {private final String body;public LogHttpServletRequestWrapper(HttpServletRequest request) {super(request);StringBuilder stringBuilder = new StringBuilder();BufferedReader bufferedReader = null;InputStream inputStream = null;try {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);}} else {stringBuilder.append("");}} catch (IOException ex) {} finally {if (inputStream != null) {try {inputStream.close();}catch (IOException e) {e.printStackTrace();}}if (bufferedReader != null) {try {bufferedReader.close();}catch (IOException e) {e.printStackTrace();}}}body = stringBuilder.toString();}@Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());ServletInputStream servletInputStream = new ServletInputStream() {@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() throws IOException {return byteArrayInputStream.read();}};return servletInputStream;}@Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new InputStreamReader(this.getInputStream()));}public String getBody() {return this.body;}}

MyResponseWrapper.java

public class MyResponseWrapper extends HttpServletResponseWrapper {private ByteArrayOutputStream buffer;private ServletOutputStream out;public MyResponseWrapper(HttpServletResponse httpServletResponse) {super(httpServletResponse);buffer = new ByteArrayOutputStream();out = new WrapperOutputStream(buffer);}@Overridepublic ServletOutputStream getOutputStream() throws IOException {return out;}@Overridepublic void flushBuffer()throws IOException {if (out != null) {out.flush();}}public byte[] getContent() throws IOException {flushBuffer();return buffer.toByteArray();}class WrapperOutputStream extends ServletOutputStream {private ByteArrayOutputStream bos;public WrapperOutputStream(ByteArrayOutputStream bos) {this.bos = bos;}@Overridepublic void write(int b)throws IOException {bos.write(b);}@Overridepublic boolean isReady() {// TODO Auto-generated method stubreturn false;}@Overridepublic void setWriteListener(WriteListener arg0) {// TODO Auto-generated method stub}}
}

filter 拦截器 获取http请求参数相关推荐

  1. Spring拦截器获取request请求体中的json数据,并转换成Java对象的解决办法

    1.要被拦截的Controller接口 我们需要一个更新用户信息接口,请求方式为POST,参数类型为对象类型(UserInfo),代码如下: @Resource private UserService ...

  2. springmvc拦截器对请求参数解密_SpringMVC拦截器如何修改请求参数

    拦截器1,基本拦截器: package cn.ijava.interceptor; import javax.servlet.http.HttpServletRequest; import javax ...

  3. 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数

    1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...

  4. springboot拦截请求路径_SpringBoot拦截器如何获取http请求参数

    1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...

  5. 在拦截器里放入参数 controller_干货|SpringMVC拦截器的使用详解

    一.拦截器简介 Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信 ...

  6. 修改拦截器里的请求头_OkHttp4 源码分析(1) 请求流程分析

    square/okhttp​github.com 本文基于OkHttp4.7.1分析 同步请求示例代码 OkHttpClient client = new OkHttpClient.Builder() ...

  7. Java微信公众号开发之使用拦截器获取粉丝openID

    目的 本次实现的目的是:在微信公众号项目中,可能在每次访问页面的时候需要带上openid或者授权,查数据库太耗性能.多次多个地方去调授权接口也不是最佳的方案,如果能利用拦截器拦截到每次请求访问后台,这 ...

  8. php 请求拦截,解决拦截器对ajax请求的拦截实例详解

    解决拦截器对ajax请求的的拦截 拦截器配置:public boolean preHandle(HttpServletRequest request, HttpServletResponse resp ...

  9. java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...

最新文章

  1. 嵌入式Web服务器移植
  2. 开源库BearSSL介绍及使用
  3. Handler线程间通信
  4. HTML从入门到进阶修炼
  5. java 多线程顺序执行
  6. mysql 函数 数字转字串_mysql中字符串和数字的互转函数
  7. PCL中的点云ICP配准(附源代码和数据)
  8. git公钥私钥及密码说明
  9. 王柏北邮计算机副院长,“中国电信上海研究院—北京邮电大学计算机学院战略合作框架协议”签约仪式隆重举行...
  10. php fpm设置时区,php设置时区的解决方案
  11. 综合素质计算机考点,教师资格综合素质考前必背知识点:基本能力
  12. cnn生成图像显著图_基本原理 | 图片中的绝对位置信息,CNN能搞定吗?
  13. 基于C++6.0的Gh0st远控源码研究及在VS2019下的编译修正和测试
  14. C/C++最大的祸害是什么?内存错误,舍它其谁!
  15. python123练习题文库_python模拟登录百度文库后如何点击马上签到
  16. android图片下载工具类
  17. vba 错误 自动化错误_经典的自动化错误
  18. 【Autodesk Maya】ptyhon 常用命令
  19. 初读《偷影子的人》观后感
  20. ARM全国产云平台部署容器实战

热门文章

  1. Android中照片墙的经典实现
  2. k8s tfjob批调度-volcano调研
  3. k8s_node节点得pod频繁重启排查原因
  4. MFC组合框实现多列组合框功能
  5. 【Java基础】NoClassDefFoundError 和 ClassNotFoundException的定义及其区别
  6. idea子模块使用父模块变量properties in parent definition are prohibited
  7. Qt/C++实现多功能计算器
  8. STMF4编写系统时钟
  9. 7-9 兔子繁衍问题分数 15
  10. 计算机组装与维护褚建立答案,计算机组装与维护_课程标准