什么是Shiro的当前主题?

时间:2017-10-21 19:09:02

标签: java shiro

我是Shiro的新手并且对当前的主题概念感到困惑:

Subject subject = SecurityUtils.getSubject(); // gets the current subject
subject.login(...); // do login
subject.logout(); // do logout

在我的应用程序中,我需要同时运行来自不同用户的工作,因此多个用户(主体)同时共存,新用户登录和旧用户即时注销:客户端使用[用户名,密码]向服务器发送工作,服务器使用给定的[用户名,密码]由Shiro进行凭据检查,如果数据库中不存在[用户名,密码],则拒绝工作,如果存在,则登录并发送要处理的工作,同时其他客户端发送他们的工作和登录,我的问题是在用户的工作完成后我需要注销用户的时候,我该如何获得它的主题?

1 个答案:

答案 0 :(得分:0)

SecurityUtils.getSubject()返回绑定到当前线程的主题(典型的Web应用程序模式),会话源通常来自Http Session或Http Request中的信息。 (Shiro没有绑定到Servlet API,它只是一个非常常见的模型)。因此,在您的应用程序的上下文中,请求可能只是包含当前User / Subject的一些方法调用(不确定您的应用程序如何进行此关联或对其进行身份验证,但这是一个不同的问题) 。这意味着您可能不需要使用SecurityUtils.getSubject()

如果你有一个Subject,如果你想在你的代码中的其他地方使用SecurityUtils.getSubject(),你可以将调用包装在Callable:https://shiro.apache.org/subject.html#automatic-association中(这基本上是Shiro的Servlet模块)一样)