问题: 客户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
/*
修改前:

修改后

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

被折叠的 条评论
为什么被折叠?



