问题: 客户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中的配置

<filter>
<filter-name>ResponseCodeFilter</filter-name>
<filter-class>com.supermap.test.ResponseCodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ResponseCodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

修改前:

修改后

 

最新文章

  1. ABP理论学习之功能管理
  2. 【MVC拾遗】MVC的单元测试简单学习总结
  3. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q144-Q146)
  4. java高薪之路__009_网络
  5. js模拟类的公有与私有 方法与变量
  6. OpenSSL 双向认证
  7. Centos环境下部署游戏服务器-编译
  8. Swift - 使用Core Data进行数据持久化存储
  9. magento数据查询
  10. python--tile函数
  11. 基于 Koa平台Node.js开发的KoaHub.js的跳过组件代码
  12. 51 nod 1456 小K的技术(强连通 + 并查集)
  13. [转载]Oracle Golden Gate - 概念和机制 (ogg)
  14. ELK部署与使用总结
  15. Selenium support for PhantomJS has been deprecated, please use headless
  16. hadoop的块
  17. Linux 中的定时处理 cron服务
  18. 32-java 里面list的问题
  19. 01-Python的基础知识3
  20. mysql 日志操作

热门文章

  1. &lt;iframe&gt;和&lt;frame&gt;标签属性详解
  2. 推荐一个加载动图的网站loading.io
  3. Spark源码(1): SparkConf
  4. 前端HTML介绍,标签介绍,基础选择器,CSS引入方法
  5. java新特性stream
  6. Linux 系统信息查询大全
  7. checkBox复选框,获得选中那一行所有列的数据
  8. 编译+远程调试spark
  9. SQL0668N Operation not allowed for reason code &quot;3&quot; on table &quot;TEST&quot;. SQLSTATE=57016
  10. Eureka 服务中心