ModelAndView线程安全的Spring Boot Web应用程序

时间:2017-02-10 15:55:11

标签: spring spring-boot spring-web

以这种方式使用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;
    }

}

在这种情况下甚至不确定如何测试线程安全性,因此可以理解任何洞察力(技术,工具等)。

0 个答案:

没有答案