【发布时间】:2012-04-11 14:45:35
【问题描述】:
我刚刚按照文档中的建议在我的主要业务逻辑处理程序之前向我的服务器管道添加了一个ExecutionHandler。
为了安全,我使用 Apache Shiro http://shiro.apache.org/。在我添加ExecutionHandler 之前它运行良好。
问题:
Shiro 的执行上下文绑定到您获取Subject 对象的当前线程。因此,如果在工作线程中获得了Subject,但业务逻辑在单独的ExecutionHandler 托管线程中执行,那么就 Shiro 而言,这两个执行上下文将不会连接。因此,ExecutionHandler 线程中的 Shiro 将无法意识到 Subject 实际上是经过身份验证的。所以我遇到了身份验证错误。
可以将给定的Subject 与Runnable 关联,然后将其传递给Executor.execute(),以便维护安全上下文。见:http://shiro.apache.org/subject.html
基于此,我认为需要找到一种方法将当前 Shiro Subject 与 ExecutionHandler Runnable 关联起来。
我仍在尝试完全理解 ExecutionHandler 和 OrderedMemoryAwareThreadPoolExecutor 的实现。
基本上我需要在将aRunnable 传递给Executor.execute(aRunnable) 之前调用subject.associateWith(aRunnable)。
有没有人想过我可以在哪里/如何让 Shiro 参与进来?
谢谢, 马特
【问题讨论】:
-
看看你如何集成 shiro 和 Netty 会很有趣。如果是开源的,可以分享一下链接吗?也许将其粘贴为 github gist。
标签: multithreading netty shiro