前端快速连续请求, 导致后台获取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();

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM