如何将用户ID传递到Akka系统?

时间:2016-03-17 22:29:44

标签: spring security authorization akka

我们在内部使用Akka提供小型服务,以非阻塞方式并发运行操作。 Akka对我们很有价值,但是现在我需要为一些演员添加授权(对特定对象的搜索和访问限制进行过滤)。在将大部分工作转移到Akka系统管理的演员之前,我们使用Spring Boot和Spring Security处理Web容器上的身份验证和授权。天真,我以为我可以用

String userId = SecurityContextHolder.getContext()。getAuthentication()。getName();

在演员中,但当然失败是因为我们在Akka控制的线程上。默认情况下,我无法控制我的Akka系统的线程,因此没有可用的线程本地安全上下文。

我看到两个选项:

  1. 将用户ID作为消息的一部分传递
  2. 通过ExecutionContext将Spring DelegatingSecurityContextExecutorService传递给Akka系统
  3. On 1:我可以使用消息传递用户ID,以使其可供相应的actor使用。但是,当经过身份验证的用户标识成为消息的一部分时,如何保护我的演员不会收到包含任何类型用户标识的消息?这是不好的做法还是Akka系统可以防止这种滥用?我是否需要激活Akka系统的进一步安全性?

    On 2:我可以在创建Akka系统时传递自己的ExecutionContext。这允许我将Spring的DelegatingSecurityContextExecutorService实例传递给它,希望线程本地SecurityContext正在顺序传递。有人成功地做到了吗?我想到的一个问题是:当演员实际在远程机器上运行时会发生什么?那里的线程肯定没有SecurityContext。

    那你对此有何看法?你还有其他选择吗?非常感谢提前!

0 个答案:

没有答案