以这种方式使用ModelAndView“线程安全”吗?在构造函数上传递的UserToken bean是会话范围和代理的,因此每个用户都应该访问自己的令牌,对吧?或者每次为每个用户覆盖UserToken的所有请求使用相同的ModelAndView,从而可能导致用户A看到用户B的令牌?
@Controller
public class ViewController {
private final UserToken userToken;
private final ModelAndView mav;
@Value("${redirect.url}")
String redirectUrl;
@Autowired
public ViewController(UserToken userToken) {
this.userToken = userToken;
this.mav = new ModelAndView();
}
@RequestMapping("/")
public ModelAndView defaultView() {
return getModelAndView("home");
}
@RequestMapping("/entryPoint")
public ModelAndView accessDenied(@RequestParam(required=false) String token) {
userToken.deserialize(token);
mav.addObject("userToken", userToken);
return getModelAndView("redirect:/");
}
/**
* Handle redirect if the userToken is invalid
* @param viewName The view to map
* @return the ModelAndView
*/
private ModelAndView getModelAndView(String viewName) {
if (userToken.isValid()) {
mav.setViewName(viewName);
} else {
mav.setViewName("redirect:" + redirectUrl);
}
return mav;
}
}
在这种情况下甚至不确定如何测试线程安全性,因此可以理解任何洞察力(技术,工具等)。