JavaWeb-用过滤器修改请求的返回状态码

问题: 客户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>

修改前:

修改后

 

原文地址:https://www.cnblogs.com/yaohuimo/p/12063682.html

时间: 2024-11-06 20:21:45

JavaWeb-用过滤器修改请求的返回状态码的相关文章

手动修改PHP页面返回状态码

<?php //比如当前页面要返回404状态码 header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found");

修改请求和返回报文

一.Charles中修改请求.修改返回值 1. 找到要修改的请求, 设置断点 2.修改请求信息 3.修改返回信息,并重新发送 注意: 1.在手机上抓的包也可以通过上述方法进行修改请求和返回的报文. 2.https都是加密的,需要有证书的才可以抓包,http或者bbs的--一般的证书是以.cret结尾的文件双击就可以装证书 3.通过抓包,可以分析和定位问题 4.URL转码--浏览器对特殊字符处理时,就自己定义了比如%20=空格,以%开头正常的 二.Fiddler抓取请求 Fidder抓请求和cha

接口请求返回状态码总结

接口请求返回状态码总结 前端在调用接口时都要关注接口返回给我们的状态码,之前只是大概的了解比如404是前端的错,可能是路径错误等,300+可能是重定向了,500以上是服务端或者服务器的错误,并没有一个很好的总结.今天中午看群里有人问这问题,就搜集对比整理了一下,如下: 1xx - 信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应.· 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.· 101 - Switchin

http web返回状态码

Java发送Http请求并获取状态码 转发自:http://www.cnblogs.com/renhui/p/6197526.html 毛毛 通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page/qizha/pros_add.jsp"); try { HttpURLConnection uConnection = (HttpURLConnection

服务器返回状态码解析

服务器返回的各种状态码到底表示什么意思呢,哪些说明没有问题,哪些返回状态是出问题了,这个返回状态码表示的是什么意思,下面是服务器各种返回状态码的意义: 100(继续)请求者应当继续提出请求.服务器返回此代码则意味着,服务器已收到了请求的第一部分,现正在等待接收其余部分. 101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备进行切换. 200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.如果您的robots.txt文件显示为此状态,那么,这表示Googlebo

HTTP返回状态码和错误

HTTP 返回状态码一.1xx - 信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应. ? 100 - 继续. ? 101 - 切换协议. 二.2xx - 成功 这类状态代码表明服务器成功地接受了客户端请求. ? 200 - 确定.客户端请求已成功. ? 201 - 已创建. ? 202 - 已接受. ? 203 - 非权威性信息. ? 204 - 无内容. ? 205 - 重置内容. ? 206 - 部分内容. 三.3xx - 重定向 客户端浏

HTTP/1.1标准请求方法和状态码

HTTP/1.1标准自从1999年制定以来至今仍然是一个应用广泛并且通行的标准 相关文档 RFC2616:Hypertext Transfer Protocol -- HTTP/1.1 在RFC6585中,状态码428.429.431.511加了进来 RFC2616制订了关于HTTP/1.1的一系列标准 下面我们来关注请求方法和状态码 在第九章中,请求方法包括GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT一共七个,其中GET.POST在编程中用得最多 HEAD:只返

nginx返回状态码

200:服务器成功返回网页 403:服务器拒绝请求.404:请求的网页不存在 499:客户端主动断开了连接.500:服务器遇到错误,无法完成请求.502:服务器作为网关或代理,从上游服务器收到无效响应.503 - 服务不可用 504:服务器作为网关或代理,但是没有及时从上游服务器收到请求.这些状态码被分为五大类: 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息. 400-499 用

HTTP请求方法与状态码

HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法:GET,POST和HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE 和 CONNECT方法. GET:请求制定的页面信息,并返回实体主体. HEAD:类似于get请求.只不过返回的响应中没有具体的内容,用于获取报头. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件).数据被包含在请求体中.POST请求可能会导致新的资源的建