springboot 添加请求头(反射实现)
springboot 添加请求头(反射实现)
#
******************************
相关类及接口
org.apache.catalina.connector.RequestFacade
public class RequestFacade implements HttpServletRequest {
protected Request request = null;
protected static final StringManager sm = StringManager.getManager(RequestFacade.class);
public RequestFacade(Request request) {
this.request = request;
}
org.apache.catalina.connector.Request
public class Request implements HttpServletRequest {
private static final Log log = LogFactory.getLog(Request.class);
protected org.apache.coyote.Request coyoteRequest;
org.apache.coyote.Request
public final class Request {
private final MimeHeaders headers = new MimeHeaders();
org.apache.tomcat.util.http.MimeHeaders
public class MimeHeaders {
***************
相关方法
public void removeHeader(String name) {
public MessageBytes addValue(String name) {
org.apache.tomcat.util.buf.MessageBytes
public final class MessageBytes implements Cloneable, Serializable {
public void setString(String s) {
******************************
示例
**********************
filter 层
CustomFilter
@Component
public class CustomFilter implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map<String,String> map=new HashMap<>();
map.put("name","瓜田李下");
addHeader(request,map);
return true;
}
private void addHeader(HttpServletRequest request, Map<String,String> headerMap){
if (headerMap==null||headerMap.isEmpty()){
return;
}
Class<? extends HttpServletRequest> c=request.getClass();
System.out.println(c.getName());
try{
Field requestField=c.getDeclaredField("request");
requestField.setAccessible(true);
Object o=requestField.get(request);
Field coyoteRequest=o.getClass().getDeclaredField("coyoteRequest");
coyoteRequest.setAccessible(true);
Object o2=coyoteRequest.get(o);
Field headers=o2.getClass().getDeclaredField("headers");
headers.setAccessible(true);
MimeHeaders mimeHeaders=(MimeHeaders) headers.get(o2);
for (Map.Entry<String,String> entry:headerMap.entrySet()){
mimeHeaders.removeHeader(entry.getKey());
mimeHeaders.addValue(entry.getKey()).setString(entry.getValue());
}
}catch (Exception e){
e.printStackTrace();
}
}
}
**********************
config 层
WebMvcConfig
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Resource
private CustomFilter customFilter;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(customFilter).addPathPatterns("/hello");
}
}
**********************
controller 层
HelloController
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello3(HttpServletRequest request){
String name=request.getHeader("name");
if (name!=null){
System.out.println(name);
}
return "hello world";
}
}
************************
控制台输出
org.apache.catalina.connector.RequestFacade
瓜田李下
还没有评论,来说两句吧...