如何使用spring security检查用户是否从其他Web应用程序登录

时间:2014-01-30 00:19:36

标签: java spring tomcat spring-security

我有以下设置。

server1:我在一个应用程序中使用spring security v3.1.4。此应用程序在其自己的服务器上运行(例如,在server1.mydomain.com上的tomcat)。

server2:我在另一台服务器上运行另一个第三方Web应用程序(例如,在server2.mydomain.com上运行tomcat)。这个应用程序是可插入的,它允许我安装jar以在运行时动态修改行为。它的目的是提供内容。

用户和资源访问在server1上进行管理。内容由server2提供。在server2上,如果有资源请求进来,我需要询问server1用户是否已登录。这可能与spring安全性有关吗?我想我会用资源请求传递用户名(例如http://server2.mydomain.com?getFileId=1&username=johndoe@gmail.com)。

我在春季安全网站上看了一下,SSO似乎是要走的路(例如使用中央认证服务)。但这似乎有点矫枉过正。我们的架构已经运行了几台服务器。

  • 集成(例如使用spring security的webapp)
  • 媒体(例如第三方网络广告)
  • 弹性搜索(群集)
  • mysql(群集)

如果可能的话,我们希望有一个简约系统(但我们的系统不小,考虑到我们使用rdbms / IR集群的投资和假设)。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

实现这一目标的一种可能方式 - 虽然这不是我自己尝试过的 - 可能是通过一个简单的基于REST的控制器在server1中公开Spring Security的SessionRegistry。然后,这将允许server2通过发出简单的HTTP GET请求来远程查询server1中的经过身份验证的用户。

阅读Spring Security文档的Session Management部分以确定如何访问SessionRegistry可能是值得的。我认为基本设置是在server1上的配置的<session-management>部分中指定<http>标记。

<security:session-management>
    <security:concurrency-control session-registry-ref="sessionRegistry"/>
</security:session-management>

<bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl"/>

您还需要向server1的web.xml添加一个侦听器

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

然后,您需要在server1上创建的控制器可以使用SessionRegistry

进行自动装配
@Autowired
private SessionRegistry sessionRegistry

从那里,您可以使用sessionRegistry.getAllSessions()来确定在对服务器的请求中传递的用户名(主体)是否已登录到server1上。

更多的想法而不是具体的答案 - 但可能会给你一个探索的途径。

相关问题