我对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
感谢
答案 0 :(得分:0)
您是否已设置afterLogoutUrl
参数?它在从grails进行相应的注销后管理cas logout。
以下是我的一个应用程序的示例:
grails.plugins.springsecurity.logout.afterLogoutUrl = "https://$servercas/cas/logout?url=http://$servercas/mygrailsapp/"
有关详细信息,请参阅单点注销
下的CAS plugin docs答案 1 :(得分:0)
显然,spring-security-core Grails插件中的一个模糊功能与单点登出冲突,如CAS Java客户端中实现的那样。
这是在bug from Jan 2011中记录的,显然没有人有兴趣解决。
有一个简单的解决方法,只需在配置中禁用隐藏功能:
grails.plugin.springsecurity.seSessionFixationPrevention = false