springboot 添加请求头(HttpServletRequestWrapper实现)


springboot 添加请求头(HttpServletRequestWrapper实现)

 

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

相关类及接口

 

HttpServletRequestWrapper

public class HttpServletRequestWrapper extends ServletRequestWrapper implements HttpServletRequest {

***************
构造方法

    public HttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
    }

***************
相关方法

    public String getHeader(String name) {
    public Enumeration getHeaders(String name) {
    public Enumeration getHeaderNames() {

    public int getIntHeader(String name) {
    public long getDateHeader(String name) {

 

 

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

示例

 

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

filter 层

 

CustomHttpServletRequest:自定义请求类,添加相关方法

public class CustomHttpServletRequest extends HttpServletRequestWrapper {

    private Map headers=new HashMap<>();

    public CustomHttpServletRequest(HttpServletRequest request){
        super(request);
    }

    public void addHeader(String name,String value){
        headers.put(name, value);
    }

    @Override
    public String getHeader(String name) {
        String value=super.getHeader(name);

        if (headers.containsKey(name)){
            value=headers.get(name);
        }

        return value;
    }

    @Override
    public Enumeration getHeaderNames() {
        List names=Collections.list(super.getHeaderNames());
        names.addAll(headers.keySet());

        return Collections.enumeration(names);
    }

    @Override
    public Enumeration getHeaders(String name) {
        List list= Collections.list(super.getHeaders(name));

        if (headers.containsKey(name)){
            list.add(headers.get(name));
        }

        return Collections.enumeration(list);
    }
}

 

CustomFilter:过滤器对请求添加header

@Component
public class CustomFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        CustomHttpServletRequest request=new CustomHttpServletRequest((HttpServletRequest) servletRequest);
        request.addHeader("header","瓜田李下");

        filterChain.doFilter(request,servletResponse);
    }
}

 

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

config 层

 

WebMvcConfig:注册拦截器,对指定的请求添加header

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Resource
    private CustomFilter customFilter;

    @Bean
    public FilterRegistrationBean initFilterRegistrationBean(){
        FilterRegistrationBean registrationBean=new FilterRegistrationBean<>();
        registrationBean.setFilter(customFilter);
        registrationBean.addUrlPatterns("/hello");
        registrationBean.setOrder(0);

        return registrationBean;
    }
}

 

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

controller 层

 

HelloController

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello4(HttpServletRequest request){
        String value=request.getHeader("header");
        if (value!=null){
            System.out.println(value);
        }

        return "hello world";
    }
}

 

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

控制台输出

 

瓜田李下

说明:调用接口/hello, 拦截器拦截请求,添加请求头

 

 

你可能感兴趣的:(springboot)