Springboot应用中过滤器如何修改response的header和body内容
package one.util;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.RequestFacade;
import org.apache.tomcat.util.http.MimeHeaders;
import org.springframework.util.ObjectUtils;
import javax.servlet.ServletRequestWrapper;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
public class HeadersEdit {
private final HttpServletRequest request;
private Map
private MimeHeaders itsHeaders;
private boolean isDeleteKnown=true;
public HeadersEdit(HttpServletRequest request){
this.request=request;
modifyHeaders= new HashMap<>();
itsHeaders=getMimeHeaders(getRequestFacade());
}
private HttpServletRequest getRequestFacade(){
try{
Field field= ServletRequestWrapper.class.getDeclaredField("request");
HttpServletRequest result;
field.setAccessible(true);
result=(HttpServletRequest)field.get((request));
while(!(result instanceof RequestFacade)){
result=(HttpServletRequest)field.get((result));
}
return result;
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("HeadersEdit Error!");
}
}
private MimeHeaders getMimeHeaders(HttpServletRequest requestFacade){
try{
Field itsRequest= RequestFacade.class.getDeclaredField("request");
itsRequest.setAccessible(true);
HttpServletRequest o5=(HttpServletRequest) itsRequest.get(requestFacade);
Field coyoteField= Request.class.getDeclaredField("coyoteRequest");
coyoteField.setAccessible(true);
org.apache.coyote.Request coyoteRequest=(org.apache.coyote.Request) coyoteField.get(o5);
Field headers=org.apache.coyote.Request.class.getDeclaredField("headers");
headers.setAccessible(true);
return (MimeHeaders)headers.get(coyoteRequest);
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("HeadersEdit Error!");
}
}
private boolean setValueExecutor(Map
String key;
for(Map.Entry
key=entry.getKey();
if(itsHeaders.getHeader(key)!=null){
if(isDeleteKnown){
itsHeaders.removeHeader(key);
}else{
return false;
}
}
itsHeaders.addValue(key).setString(entry.getValue());
}
return true;
}
public boolean setValue(String key,String value){
if(ObjectUtils.isEmpty(key)||ObjectUtils.isEmpty(value)){
return false;
}
Map
map.put(key,value);
return setValueExecutor(map);
}
public boolean setValue(Map
if(ObjectUtils.isEmpty(newHeaders)){
return false;
}
return setValueExecutor(newHeaders);
}
public void changeCheck(){
isDeleteKnown=!isDeleteKnown;
}
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播
相关文章
- Spring定时服务QuartZ原理及代码案例
- SpringBoot项目实现短信发送接口开发的实践
- SpringSecurity中的Filter Chain(过滤器链)
- Springboot POI导出Excel(浏览器)
- Spring Cloud Gateway实现灰度发布方案
- Springboot应用中过滤器如何修改response的header和body内容
- SpringBoot中整合Ehcache实现热点数据缓存的详细过程
- SpringBoot基于数据库的定时任务统一管理的实现
- spring webClient配置及使用简单代码示例
- SpringBoot获取Request对象的常见方法