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