Springboot agregar encabezado de solicitud (implementación de reflexión)


Springboot agregar encabezado de solicitud (implementación de reflexión)

 

******************************

Clases e interfaces relacionadas

 

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) {

 

 

******************************

Ejemplos

 

**********************

capa de filtro

 

Filtro personalizado

@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();
        }
    }
}

 

**********************

capa de configuración

 

WebMvcConfig

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Resource
    private CustomFilter customFilter;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(customFilter).addPathPatterns("/hello");
    }
}

 

**********************

capa de controlador

 

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";
    }

}

 

************************

Salida de la consola

 

org.apache.catalina.connector.RequestFacade
瓜田李下

 

 

387 artículos originales publicados · Me gusta 98 · Visitas 30,000+

Supongo que te gusta

Origin blog.csdn.net/weixin_43931625/article/details/104992096
Recomendado
Clasificación