【发布时间】:2015-12-28 07:34:42
【问题描述】:
我正在使用 spring 框架,这是我用来检索 HttpSession 对象的代码:
ServletRequestAttributes attr;
try {
attr = (ServletRequestAttributes) RequestContextHolder
.currentRequestAttributes();
} catch (Exception e) { }
HttpSession session = attr.getRequest().getSession(false);
Holder 类以 线程绑定 的形式公开 Web 请求 RequestAttributes 对象。
因此在容器创建的用于处理请求的线程之外不会看到它。有没有办法在某个子线程中检索会话?
【问题讨论】:
-
不,因为这将是一个相当大的安全漏洞......
-
@M.Deinum 因此,任何会话都是线程绑定对象。但这是在
servlet API文档中的某处还是在其他地方指定的?我只是从没想过从多个线程访问整个会话...... -
你也不应该这样。想象一下,您的会话中有一个购物车,任何人都可以修改会话并将东西添加到您的购物车...我想如果发生这种情况您会不高兴...想象一下您的安全凭证存储在会话中(spring security 确实如此)并且任何人都可以访问它(设计糟糕的框架可能会将您的密码放在那里)......
标签: java multithreading spring