JavaWeb-用过滤器修改请求的返回状态码
2024-08-28 11:47:14
问题: 客户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>
修改前:
修改后
最新文章
- ABP理论学习之功能管理
- 【MVC拾遗】MVC的单元测试简单学习总结
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q144-Q146)
- java高薪之路__009_网络
- js模拟类的公有与私有 方法与变量
- OpenSSL 双向认证
- Centos环境下部署游戏服务器-编译
- Swift - 使用Core Data进行数据持久化存储
- magento数据查询
- python--tile函数
- 基于 Koa平台Node.js开发的KoaHub.js的跳过组件代码
- 51 nod 1456 小K的技术(强连通 + 并查集)
- [转载]Oracle Golden Gate - 概念和机制 (ogg)
- ELK部署与使用总结
- Selenium support for PhantomJS has been deprecated, please use headless
- hadoop的块
- Linux 中的定时处理 cron服务
- 32-java 里面list的问题
- 01-Python的基础知识3
- mysql 日志操作
热门文章
- <;iframe>;和<;frame>;标签属性详解
- 推荐一个加载动图的网站loading.io
- Spark源码(1): SparkConf
- 前端HTML介绍,标签介绍,基础选择器,CSS引入方法
- java新特性stream
- Linux 系统信息查询大全
- checkBox复选框,获得选中那一行所有列的数据
- 编译+远程调试spark
- SQL0668N Operation not allowed for reason code ";3"; on table ";TEST";. SQLSTATE=57016
- Eureka 服务中心