前端快速连续请求, 导致后台获取request错乱, 无法获取到header, 已解决

原文链接:https://www.cnblogs.com/zizaiwuyou/p/13936567.html

前几天我遇到一个问题, 在后端获取header内参数的一个方法出现了偶发的bug, 获取不到值

之前是在controller父类中有一个保存request的方法, 如下

    @ModelAttribute
    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }

然后在获取时直接

    protected Integer getTeamId() {
        String teamIdStr = request.getHeader("teamId");
        //如果header中不存在teamId,则从参数中获取teamId
        if(StringUtils.isBlank(teamIdStr)){
            teamIdStr = request.getParameter("teamId");
        }
        return decryptTeamId(teamIdStr);
    }

这样获取会偶尔获取不到

解决方法:

后来改了一下获取方式, 使用如下的方式获取request就好了

    protected Integer getTeamId() {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String teamIdStr = request.getHeader("teamId");
        //如果header中不存在teamId,则从参数中获取teamId
        if(StringUtils.isBlank(teamIdStr)){
            teamIdStr = request.getParameter("teamId");
        }
        return decryptTeamId(teamIdStr);
    }

主要是这两句

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();

 

posted @ 2020-11-06 14:01  CN-无忧  阅读(1185)  评论(0编辑  收藏  举报