Spring修改Request头,看这一篇就够了

自定义修改Request请求

需求

在实际的开发过程中,需要修改Request请求,比如适配第三方系统的认证方式,而又不想修改它的源码,所以在每次请求之前做一次token转换,达到适配的目的。

为了防止内容的随意篡改,一般的HttpServletRequest是不可变的,但是Spring提供了一个Wrapper,可以让用户自定义Request,修改里面的内容。

ps:之前也在网上搜罗过,但是内容确实参差不齐,所以才有了本文

方案

核心代码:

public class CustomHttpServletRequest extends HttpServletRequestWrapper {

    //可修改的Headers
    private Map<String,String> headers=new HashMap<>();

    //可修改的URI后面的参数,修改参数见博客:lino.chat

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

}

使用:

CustomHttpServletRequest customRequest = new CustomHttpServletRequest(httpRequest);
                if (existOnHeader(httpRequest)){
                    // 创建自定义请求,附加新Token到Header
                    customRequest.addHeader(PARAM_TOKEN, newToken);
                }else if (existOnURI(httpRequest)){
                    
                }

有问题欢迎一块讨论。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值