Apache Shiro集成和Netty ExecutionHandler/OrderedMemoryAwareThreadPoolExecutor
我刚在我的服务器管道中添加了一个ExecutionHandler
,就在我的主要业务逻辑处理程序之前,正如文档中所建议的那样。Apache Shiro集成和Netty ExecutionHandler/OrderedMemoryAwareThreadPoolExecutor
为了安全起见,我使用Apache Shiro http://shiro.apache.org/。它工作得很好,直到我加入了ExecutionHandler
。
问题:
四郎的执行上下文被绑定到你获得Subject
对象当前线程。因此,如果在工作线程中获得Subject
,但业务逻辑在独立的ExecutionHandler
托管线程中执行,则两个执行上下文不会连接到Shiro所关注的位置。因此,在ExecutionHandler
线程中的Shiro将不会意识到Subject
实际上已被认证。所以我得到认证错误。
将给定的Subject
与Runnable
关联起来,然后将其传递给Executor.execute()
以便保持安全上下文是可能的。请参阅:http://shiro.apache.org/subject.html
基于此,我认为需要找到一种方法来将当前Shiro Subject
与ExecutionHandler
Runnable
相关联。
我仍试图完全理解ExecutionHandler
和OrderedMemoryAwareThreadPoolExecutor
的实现。
基本上我需要在aRunnable
传递给之前拨打subject.associateWith(aRunnable)
。
有没有人有想过在何处/如何将四郎挂入混音?
谢谢, 马特
四郎可以自动为你的线程切换。
您应该可以使用开箱即用的SubjectAwareExecutor,SubjectAwareExecutorService或SubjectAwareScheduledExecutorService实现中的一个。你可以包装将执行Runnables的实际ExecutorService,并且你很好。例如:
ExecutorService myExistingExecutorService = //get from somewhere
ExecutorService useThis = new SubjectAwareExecutorService(myExistingExecutorService);
你可以“注入”或应用程序的任何地方配置useThis
实例,调用代码不会永远需要知道四郎存在。
例如,一个不知道的组件调用useThis.submit(someRandomRunnable)
不知道Shiro正在使用,但Shiro主体仍然保留在线程中。查看更多相关的JavaDoc页面。
HTH!
Les
我在我的应用程序上下文中连接了'SubjectAwareExecutorService',现在一切正常。非常感谢。这正是我所期待的。干杯,马特 – 2012-03-28 14:21:44
看看你如何整合shiro和Netty会很有趣。如果它是开源的,你能分享链接吗?也许粘贴它作为github的要点。 – Abe 2012-05-14 06:45:13