Spring MVC控制器-模型属性-可能的竞争条件?

时间:2019-08-30 11:06:03

标签: spring spring-boot spring-mvc

我有一个Web过滤器,它将处理发布请求,获取参数并在会话中设置其值。然后,在处理该属性的另一个页面的模型中设置会话属性的值。例如

过滤器中的代码段

if (httpServletRequest.getParameters("MY_PARAM") == null) {
    logger.error("Parameter is null!");
    throw new IllegalArgumentException("Parameter null!");
} else {
    logger.error("Parameter received redirecting to controller");
    httpServletRequest.getSession().setAttribute("MY_ATTR", httpServletRequest.getParameters("MY_PARAM"));
    //redirect code
}

然后在控制器中

@GetMapping("mypage")
public ModelAndView doStuff(HttpSession session)
    ModelAndView mav = new ModelAndView("mypage");
    mav.addObject("MY_ATTR", session.getAttribute("MY_ATTR"));

    session.setAttribute("MY_ATTR", null);

    logger.debug(mav.getModel().get("MY_ATTR") == null ? "Attribute is null" : "Attribute is set");
    return mav;
}

99%的时间日志输出为“属性已设置”,但有时为“属性为空”。这怎么可能发生?

我在控制器方法中进行了更多调试。发生此问题时,HttpSession似乎与在Web筛选器中设置属性的HttpSession不同。

0 个答案:

没有答案