java response过滤器_JavaWeb-用过滤器修改请求的返回状态码

本文介绍了一个Java实现的过滤器(ResponseCodeFilter),用于在SDK对接服务中将非标准状态码(如201)转换为200。通过扩展HttpServletResponseWrapper,过滤器能够捕获并修改响应的状态码,确保客户端只接收到200或非200的状态码。在web.xml中配置该过滤器后,可以应用于整个应用程序。

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

/*

修改前:

20191218214736607248.png

修改后

20191218214736740052.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值