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<String> getHeaders(String name) {
    public Enumeration<String> getHeaderNames() {

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

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

示例

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

filter 层

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

public class CustomHttpServletRequest extends HttpServletRequestWrapper {

    private Map<String,String> 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<String> getHeaderNames() {
        List<String> names=Collections.list(super.getHeaderNames());
        names.addAll(headers.keySet());

        return Collections.enumeration(names);
    }

    @Override
    public Enumeration<String> getHeaders(String name) {
        List<String> 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<CustomFilter> initFilterRegistrationBean(){
        FilterRegistrationBean<CustomFilter> 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, 拦截器拦截请求,添加请求头

发布了387 篇原创文章 · 获赞 98 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43931625/article/details/104998427