3

我对 grails 很陌生,我正在开发一个带有 Spring-Security-Core 和 Spring-Security-CAS 插件的应用程序。

单点登录按预期工作,但我在单点注销时遇到了麻烦。

我有两个应用程序,当我登录 cas 或任何一个应用程序时,我可以毫无问题地访问这两个应用程序。但是,当我尝试使用 app1/logout 或 app2/logout 注销时,只有 cas 和调用 /logout 的应用程序会话关闭,我仍然可以通过其他应用程序导航。

示例:通过 cas 登录记录 app1 通过 cas 票证验证记录 app2 从 app1 注销 -> app1 和 cas 会话已关闭,但 app2 仍处于登录状态(应在此处注销)

任何人都知道如何解决它?


更新

当我登录我的两个应用程序并尝试从一个应用程序中注销时,我可以在 localhost_access_log.txt 中看到这些帖子调用:

127.0.0.1 - - [10/Apr/2014:14:36:05 -0300] "GET /app/logout/index HTTP/1.1" 302 -
127.0.0.1 - - [10/Apr/2014:14:36:05 -0300] "GET /app/j_spring_security_logout HTTP/1.1" 302 -
0:0:0:0:0:0:0:1 - - [10/Apr/2014:14:36:05 -0300] "GET /cas/logout?service=http://localhost:8090/app/logout/afterLogout HTTP/1.1" 200 2039
127.0.0.1 - - [10/Apr/2014:14:36:05 -0300] "POST /app2/j_spring_cas_security_check HTTP/1.1" 200 -
127.0.0.1 - - [10/Apr/2014:14:36:05 -0300] "POST /app/j_spring_cas_security_check HTTP/1.1" 200 -
0:0:0:0:0:0:0:1 - - [10/Apr/2014:14:36:05 -0300] "GET /cas/images/confirm.gif HTTP/1.1" 200 958
0:0:0:0:0:0:0:1 - - [10/Apr/2014:14:36:05 -0300] "GET /cas/favicon.ico HTTP/1.1" 200 170

我相信从我的两个应用程序中注销就足够了,但 app2 没有注销,只有 app1 (app)

欢迎任何建议=D

谢谢

4

2 回答 2

0

你已经设置afterLogoutUrl参数了吗?它在从 grails 相应注销后管理 cas 注销。

这是从我的一个应用程序中获取的示例:

grails.plugins.springsecurity.logout.afterLogoutUrl = "https://$servercas/cas/logout?url=http://$servercas/mygrailsapp/"

有关详细信息,请参阅Single Sign Out下的CAS 插件文档

于 2014-04-09T14:44:38.850 回答
0

显然,spring-security-core Grails 插件中有一个不为人知的功能,它与在 CAS Java 客户端中实现的单点注销冲突。

这记录在2011 年 1 月的一个错误中,显然没有人有兴趣解决。

有一个简单的解决方法,只需禁用 Config 中的模糊功能:

grails.plugin.springsecurity.seSessionFixationPrevention = false
于 2015-06-17T07:47:04.867 回答