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>

修改前:

 

 修改后

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM