分布式Spring应用程序中的身份验证和会话管理

Fir*_*mir 3 spring cas jms spring-security shiro

我正在致力于将单模块 Spring Web 应用程序迁移到基于 JMS 的模块化架构中。该链接包含当前应用程序的结构和我的目标。

我将使用基于 CAS 的 SSO 服务器来执行身份验证。技术堆栈将是 spring-boot、Apache Camel、ActiveMQ 和 spring-security/apache-shiro。

例如,我将有一个库存应用程序、财务应用程序和 CAS 应用程序(SSO 服务器)。在某些地方,我必须管理一个集中的会话存储,它将保存当前的用户 ID 及其首选项。

使用案例:

  1. 用户登录 CAS SSO 并进入库存模块。库存模块将获取当前用户 ID 及其偏好(来自中央会话存储?),并且将启动销售交易。
  2. 库存完成工作后,它通过 Apache Camel 向财务部门发送一条 JMS 消息以发布会计条目。
  3. 财务应用程序从会话中获取当前用户 ID 和偏好并完成帐户过帐。

如何为上述场景创建一个公共会话存储(几乎附加到 SSO 服务器)(Spring-Session 将有所帮助?),以及如何让每个应用程序知道谁是执行此事务的实际用户。

Rau*_*l G 5

好吧,这是一个没有答案的老问题,请查看 Spring Session,这正是它的设计目的

截至目前,最常见的会话存储是 Redis,但它也支持其他存储,例如我使用 Hazelcast。

此外,使用 CAS 只会影响 Spring Security,因此用于对用户进行身份验证的内容与管理会话的方式无关。

在身份验证方面,请记住在服务之间进行另一层身份验证(服务联合),这样不仅仅是系统外部的任何人都会向您的服务发送消息。

  • 谢谢劳尔。顺便说一句,你并没有迟到。我已经选择使用 OAuth2 而不是 CAS。你的所有观点都非常有效,去年我已经实现了其中的大部分,包括使用 redis 的 spring-session。这是快速且出色的解决方案。 (2认同)