Jetty对HttpServletRequest的实现
直接通过继承的方式,实现了HttpServletRequest接口,实现类为org.eclipse.jetty.server.Request。 而存储请求头信息的关键类为:org.eclipse.jetty.http.HttpFields
相关代码如下:
/*
* Decompiled with CFR.
*
* Could not load the following classes:
* javax.servlet.FilterChain
* javax.servlet.ServletException
* javax.servlet.ServletRequest
* javax.servlet.ServletResponse
* javax.servlet.annotation.WebFilter
* javax.servlet.http.HttpFilter
* org.eclipse.jetty.http.HttpFields
* org.eclipse.jetty.http.MetaData$Request
* org.eclipse.jetty.server.Request
* org.slf4j.Logger
* org.slf4j.LoggerFactory
* org.springframework.core.annotation.Order
* org.springframework.stereotype.Component
* org.springframework.util.ReflectionUtils
*/
package com.htc.filter;
import java.io.IOException;
import java.lang.reflect.Field;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.MetaData;
import org.eclipse.jetty.server.Request;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.ReflectionUtils;
@WebFilter(urlPatterns={"/**"})
@Component
@Order(value=-10000)
public class HttpHeaderFilter
extends HttpFilter {
private static final Logger log = LoggerFactory.getLogger(HttpHeaderFilter.class);
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
try {
/*36*/ Field _metaData = ReflectionUtils.findField(Request.class, (String)"_metaData", MetaData.Request.class);
/*37*/ _metaData.setAccessible(true);
/*38*/ MetaData.Request metaDataRequest = (MetaData.Request)_metaData.get(req);
/*40*/ Field httpField = ReflectionUtils.findField(MetaData.Request.class, (String)"_fields", HttpFields.class);
/*41*/ httpField.setAccessible(true);
/*42*/ HttpFields httpFields = (HttpFields)httpField.get(metaDataRequest);
/*43*/ httpFields.remove("Content-Encoding");
}
catch (IllegalAccessException e) {
/*45*/ log.error("过滤请求头失败", (Throwable)e);
}
/*47*/ super.doFilter(req, res, chain);
}
}
方案思路来源于以下文章
对HttpServletRequest中的Header进行增删
对HttpServletRequest中的Header进行增删](springboot.io/t/topic/364…)