问题: 客户SDK对接服务,默认只识别200和非200的请求状态码。需要修改当前应用的状态码(如将201转为200)

解决方案:通过扩展HttpServletResponseWrapper,获取到每个请求的状态码,满足条件的做修改即可

具体代码:

package com.supermap.huawei;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServletResponseWrapper;

/**

* 1、输出http信息 2、修改返回的状态码

*

*/

public class ResponseCodeFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest req, ServletResponse res,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;

StatusExposingServletResponse response = new StatusExposingServletResponse(

(HttpServletResponse) res);

String ip = request.getRemoteAddr();

String method = request.getMethod();

String url = request.getRequestURI();

String characterEncoding = request.getCharacterEncoding();

String referer = request.getHeader("Referer");

chain.doFilter(request, response);

int status = response.getStatus();

System.out.println(ip + method + characterEncoding + referer + url

+ status);

// String s1 = "" + status;

if (status == 201) {

// if(s1.contains("20")){

response.setStatus(200);

} else {

response.setStatus(status);

}

}

@Override

public void destroy() {

}

public static class StatusExposingServletResponse extends

HttpServletResponseWrapper implements HttpServletResponse {

private int status = 200;

public StatusExposingServletResponse(HttpServletResponse response) {

super(response);

}

@Override

public void setStatus(int sc) {

this.status = sc;

super.setStatus(sc);

}

public int getStatus() {

return status;

}

}

}

web.xml中的配置

ResponseCodeFilter

com.supermap.test.ResponseCodeFilter

ResponseCodeFilter

/*

修改前:

修改后

java修改状态码_JavaWeb-用过滤器修改请求的返回状态码相关推荐

  1. python银行管理系统源码_javaweb银行大厅自助信息管理系统,源码行行注释,免费分享...

    全微毕设擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON(DJANGO/FLASK).THINKPHP.C#.安卓.微信小程序.MYSQL.SQLSERVER等,欢迎咨询 今天记录的 ...

  2. java request修改uri,spring cloud zuul过滤器修改requestURI 忽略大小写

    通过zuul网关处理requestURI可以做很多事情,如对uri的解密,转发,大小写转化等. 这里对URI做一个简单的大小写的转化. 写一个filter实现ZuulFilter: packageco ...

  3. java脏话模糊对比_javaweb脏话过滤器

    ? 实现过滤器只须在web.xml中设定相关设定, 不需要修改Servlet.JSP和其他静态...import java.io.IOException; ? import javax.servlet ...

  4. java web宿舍管理系统源码_JavaWeb宿舍管理系统(附 演示、源码下载地址)

    > 宿舍管理是高校管理的重要组成部分,一套优秀的管理系统不仅可以降低宿舍管理的难度,也能在一定程度上减少学校管理费用的支出,能是建设现代化高校管理体系的重要标志. 本篇文章将带你从运行环境搭建. ...

  5. SpringMVC源码阅读:过滤器

    SpringMVC源码阅读:过滤器 目录 1.前言 2.源码分析 3.自定义过滤器 3.1 自定义过滤器继承OncePerRequestFilter 3.2 自定义过滤器实现Filter接口 4.过滤 ...

  6. java修改字节码技术,Javassist修改class,ASM修改class

    背景: 项目使用的Logback 1.1.11版本的类ch.qos.logback.core.rolling.helper.RollingCalendar的periodBarriersCrossed方 ...

  7. Java字节码介绍及动态修改类

    前言 对于Java字节码,它是在Java类的编译过程产生的,即由.java源文件到.class二进制字节码文件的过程.而Java类的加载又是通过类的名字获取二进制字节流,然后在内存中将字节流生成类对象 ...

  8. java过滤器修改响应,在过滤器中实现修改http请求体和响应体

    在一些业务场景中,需要对http的请求体和响应体做加解密的操作,如果在controller中来调用加解密函数,会增加代码的耦合度,同时也会增加调试的难度. 参考spring中http请求的链路,选择过 ...

  9. 尚硅谷雷神SpringBoot2超详细笔记和源码以及自己Bug修改和个人的体会

    ## 01.基础入门-SpringBoot2课程介绍 Spring Boot 2核心技术 Spring Boot 2响应式编程 学习要求 -熟悉Spring基础 -熟悉Maven使用 环境要求 Jav ...

最新文章

  1. RichTextBox的使用
  2. V3S中换2.0寸LCD时MINIGUI无显示的问题的解决过程
  3. 客制化键盘键位修改_IQUNIX Slim87 RGB机械键盘评测
  4. C++之STL容器嵌套实现二维数组
  5. 【NLP】近期必读ICLR 2021相关论文
  6. PCL_三维点云拼接融合/点云粗配准/点云精配准
  7. servletconfigservletcontext
  8. PyCharm下载及使用
  9. 华为 BGP路由聚合
  10. 谈一下我对OOP的了解
  11. 解救IP被封的服务器
  12. Ubuntu 20.4 美化桌面、美化引导界面、Mac 既视感
  13. 解耦、削峰、异步的理解
  14. 马斯诺的行为科学体系的基础
  15. USB UVC协议分析
  16. 用友nc56 eclipse开发工具设置注意事项
  17. 手术室无菌注意事项的内容
  18. flex显示gir动画
  19. 你了解个人云盘和企业云盘有什么区别吗?
  20. 在web.xml里配置Servlet

热门文章

  1. 分类算法:决策树(C4.5)
  2. TCP的三次握手,四次断开
  3. ArcGIS Engine生成等值线(C#)
  4. XenApp_XenDesktop_7.6实战篇之十四:XenDesktop虚拟桌面的交付
  5. win8中离线安装net framework 3.5
  6. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
  7. tomcat7在eclipse中,调试时断点频繁停在threadpoolexecutor
  8. python 报错 SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1076) 解决方法
  9. golang 切片删除指定内容
  10. mysql 连接超时 wait_timeout interactive_timeout 简介