multithreading - Apache Shiro 集成和 Netty ExecutionHandler/OrderedMemoryAwareThreadPoolExecutor

标签 multithreading netty shiro

我刚刚添加了一个 ExecutionHandler按照文档中的建议,在我的主要业务逻辑处理程序之前到我的服务器管道。

我正在使用 Apache Shiro http://shiro.apache.org/为了安全。在我添加 ExecutionHandler 之前它运行良好.

问题:
Shiro 的执行上下文绑定(bind)到您获取 Subject 的当前线程。目的。所以,如果 Subject在工作线程中获取,但业务逻辑在单独的ExecutionHandler中执行托管线程,那么就 Shiro 而言,这两个执行上下文将不会连接。因此 Shiro 在 ExecutionHandler线程将无法意识到 Subject实际上是经过身份验证的。所以我收到身份验证错误。

可以关联给定的 SubjectRunnable在传递给 Executor.execute() 之前以便维护安全上下文。见:http://shiro.apache.org/subject.html

基于此我认为需要找到一种方法来关联当前 Shiro SubjectExecutionHandler Runnable .

我仍在尝试完全理解 ExecutionHandlerOrderedMemoryAwareThreadPoolExecutor实现。

基本上我需要调用subject.associateWith(aRunnable)就在 aRunnable 之前传递给 Executor.execute(aRunnable) .

有人对我可以在哪里/如何将 Shiro 加入混音有想法吗?

谢谢,
马特

最佳答案

Shiro 可以为您自动执行线程切换。

您应该可以只使用 SubjectAwareExecutor 之一, SubjectAwareExecutorService , 或 SubjectAwareScheduledExecutorService开箱即用的实现。您可以包装将执行 Runnables 的实际 ExecutorService,这很好。例如:

ExecutorService myExistingExecutorService = //get from somewhere
ExecutorService useThis = new SubjectAwareExecutorService(myExistingExecutorService);

您可以“注入(inject)”或配置 useThis在您的应用程序中的任何位置创建实例,并且调用代码不需要知道 Shiro 的存在。

例如,一个不知道的组件调用 useThis.submit(someRandomRunnable)不知道 Shiro 正在使用中,但 Shiro 主题仍将跨线程保留。查看相应的 JavaDoc 页面了解更多信息。

!

莱斯

关于multithreading - Apache Shiro 集成和 Netty ExecutionHandler/OrderedMemoryAwareThreadPoolExecutor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900221/

相关文章:

Java netty AbstractChannelHandlerContext invokeExceptionCaught

security - 如何配置 grails 和 shiro 将 cookie 标记为安全?

java - shiro 页面重定向问题

python - 来自带有队列的生产者消费者中另一个类的线程

java - 不变性和可重载配置

java - 在 netty 中路由请求以将它们委托(delegate)给不同方法的最佳实践?

java - Apache 四郎 : authenticate with username/password but store user id as the principal

java - Web 模块之间是否共享线程?

c# - ConcurrentBag 的预期用途和空作为终止条件

java - Android(Java) 从 Netty Nio 服务器读取时套接字读取挂起