【发布时间】:2012-04-07 10:46:58
【问题描述】:
我理解 Shiro 的SecurityUtils.getSubject() 工作的基本方式是它返回绑定到当前执行线程的主题。然而,这似乎与 Tomcat 等使用线程池来服务请求的 servlet 容器不一致。
如果说 Tomcat 使用 ThreadA 来处理请求,那么对 SecurityUtils.getSubject() 的任何调用都应该可以正常工作。但是,一旦选择了 ThreadB,用户就会丢失,getSubject 返回 null 并且 isAuthenticated 现在为 false。即使用户仍然登录也是如此。
我已在我的申请中确认了这一点。我正在使用 Shiro Core 1.2,并注意到当我浏览我的应用程序时,我的用户只是奇迹般地被未经身份验证。如果我查看日志,一旦使用不同的线程来处理请求,就会出现问题。
那么,我是不是把 Shiro 配置错了?似乎“当前用户”应该绑定到比当前线程更持久的东西。我希望它是基于会话的。我知道 Shiro 有会话管理,但在我发现的所有示例中,它都说通过调用查看 ThreadContext 的getSubject 来获取当前用户。我错过了什么吗?
【问题讨论】:
标签: java security tomcat servlets shiro