前端快速連續請求, 導致后台獲取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