Я только что добавил ExecutionHandler
в свой конвейер сервера непосредственно перед моим основным обработчиком бизнес-логики, как рекомендовано в документации.
Я использую Apache Shiro http://shiro.apache.org/ для обеспечения безопасности. Он работал нормально, пока я не добавил ExecutionHandler
.
Проблема:
контекст выполнения Shiro привязан к текущему потоку, в котором вы получаете объект Subject
. Таким образом, если Subject
получен в рабочем потоке, но бизнес-логика выполняется в отдельном ExecutionHandler
управляемом потоке, то два контекста выполнения не будут связаны, насколько это касается Широ. Таким образом, Широ в потоке ExecutionHandler
не будет знать, что Subject
на самом деле аутентифицирован. Поэтому я получаю ошибки аутентификации.
Можно связать данный Subject
с Runnable
перед передачей его Executor.execute()
, чтобы сохранить контекст безопасности. См.: http://shiro.apache.org/subject.html.
Исходя из этого, я думаю, нужно найти способ связать текущий Широ Subject
с ExecutionHandler
Runnable
.
Я все еще пытаюсь полностью понять реализации ExecutionHandler
и OrderedMemoryAwareThreadPoolExecutor
.
В основном мне нужно вызвать subject.associateWith(aRunnable)
непосредственно перед тем, как aRunnable
будет передано Executor.execute(aRunnable)
.
У кого-нибудь есть мысли о том, где/как я могу подключить Широ к миксу?
Спасибо, Мэтт