我在spring-mvc
JavaDoc中找到了以下很好的解释
WebUtils.getSessionMutex():
在许多情况下, HttpSession引用本身也是一个安全的互斥体 ,因为对于同一活动的逻辑会话,它始终是相同的对象引用。但是,
不能保证在不同的servlet容器之间都能做到这一点 ;唯一的100%安全方法是会话互斥。
synchronizeOnSession设置标志时,此方法用作锁定:
Object mutex = WebUtils.getSessionMutex(session);synchronized (mutex) { return handleRequestInternal(request, response);}如果您查看的实现
getSessionMutex(),它实际上会使用一些自定义会话属性(如果存在)(在
org.springframework.web.util.WebUtils.MUTEX键下),或者使用
HttpSession实例(如果没有):
Object mutex = session.getAttribute(SESSION_MUTEX_ATTRIBUTE);if (mutex == null) { mutex = session;}return mutex;回到简单的Servlet规范-要100%确保使用自定义会话属性,而不是
HttpSession对象本身。
也可以看看
- http://www.theserverside.com/discussions/thread.tss?thread_id=42912



