filter 拦截器 获取http请求参数
里面一些方法使用了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请求参数相关推荐
- Spring拦截器获取request请求体中的json数据,并转换成Java对象的解决办法
1.要被拦截的Controller接口 我们需要一个更新用户信息接口,请求方式为POST,参数类型为对象类型(UserInfo),代码如下: @Resource private UserService ...
- springmvc拦截器对请求参数解密_SpringMVC拦截器如何修改请求参数
拦截器1,基本拦截器: package cn.ijava.interceptor; import javax.servlet.http.HttpServletRequest; import javax ...
- 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数
1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...
- springboot拦截请求路径_SpringBoot拦截器如何获取http请求参数
1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...
- 在拦截器里放入参数 controller_干货|SpringMVC拦截器的使用详解
一.拦截器简介 Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信 ...
- 修改拦截器里的请求头_OkHttp4 源码分析(1) 请求流程分析
square/okhttpgithub.com 本文基于OkHttp4.7.1分析 同步请求示例代码 OkHttpClient client = new OkHttpClient.Builder() ...
- Java微信公众号开发之使用拦截器获取粉丝openID
目的 本次实现的目的是:在微信公众号项目中,可能在每次访问页面的时候需要带上openid或者授权,查数据库太耗性能.多次多个地方去调授权接口也不是最佳的方案,如果能利用拦截器拦截到每次请求访问后台,这 ...
- php 请求拦截,解决拦截器对ajax请求的拦截实例详解
解决拦截器对ajax请求的的拦截 拦截器配置:public boolean preHandle(HttpServletRequest request, HttpServletResponse resp ...
- java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...
最新文章
- 嵌入式Web服务器移植
- 开源库BearSSL介绍及使用
- Handler线程间通信
- HTML从入门到进阶修炼
- java 多线程顺序执行
- mysql 函数 数字转字串_mysql中字符串和数字的互转函数
- PCL中的点云ICP配准(附源代码和数据)
- git公钥私钥及密码说明
- 王柏北邮计算机副院长,“中国电信上海研究院—北京邮电大学计算机学院战略合作框架协议”签约仪式隆重举行...
- php fpm设置时区,php设置时区的解决方案
- 综合素质计算机考点,教师资格综合素质考前必背知识点:基本能力
- cnn生成图像显著图_基本原理 | 图片中的绝对位置信息,CNN能搞定吗?
- 基于C++6.0的Gh0st远控源码研究及在VS2019下的编译修正和测试
- C/C++最大的祸害是什么?内存错误,舍它其谁!
- python123练习题文库_python模拟登录百度文库后如何点击马上签到
- android图片下载工具类
- vba 错误 自动化错误_经典的自动化错误
- 【Autodesk Maya】ptyhon 常用命令
- 初读《偷影子的人》观后感
- ARM全国产云平台部署容器实战
热门文章
- Android中照片墙的经典实现
- k8s tfjob批调度-volcano调研
- k8s_node节点得pod频繁重启排查原因
- MFC组合框实现多列组合框功能
- 【Java基础】NoClassDefFoundError 和 ClassNotFoundException的定义及其区别
- idea子模块使用父模块变量properties in parent definition are prohibited
- Qt/C++实现多功能计算器
- STMF4编写系统时钟
- 7-9 兔子繁衍问题分数 15
- 计算机组装与维护褚建立答案,计算机组装与维护_课程标准