【问题标题】:Getting http-session from a child thread?从子线程获取http-session?
【发布时间】:2015-12-28 07:34:42
【问题描述】:

我正在使用 spring 框架,这是我用来检索 HttpSession 对象的代码:

ServletRequestAttributes attr;
try {
    attr = (ServletRequestAttributes) RequestContextHolder
            .currentRequestAttributes();
} catch (Exception e) { }
HttpSession session = attr.getRequest().getSession(false);

事情是RequestContextHolder

Holder 类以 线程绑定 的形式公开 Web 请求 RequestAttributes 对象。

因此在容器创建的用于处理请求的线程之外不会看到它。有没有办法在某个子线程中检索会话?

【问题讨论】:

  • 不,因为这将是一个相当大的安全漏洞......
  • @M.Deinum 因此,任何会话都是线程绑定对象。但这是在 servlet API 文档中的某处还是在其他地方指定的?我只是从没想过从多个线程访问整个会话......
  • 你也不应该这样。想象一下,您的会话中有一个购物车,任何人都可以修改会话并将东西添加到您的购物车...我想如果发生这种情况您会不高兴...想象一下您的安全凭证存储在会话中(spring security 确实如此)并且任何人都可以访问它(设计糟糕的框架可能会将您的密码放在那里)......

标签: java multithreading spring


【解决方案1】:

不,没有。在 Servlet API 中,会话是请求对象的一个​​属性。因此,如果您没有请求,您会检索多个现有会话中的哪一个?

【讨论】:

  • 非常感谢!顺便说一句,如果你知道它在哪里,你能不能引用规范中的相关部分......?
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多