我正在尝试了解Spring Security如何处理单点登录。我正在使用带有多个Grails应用程序的CAS服务器。这是我的情景:
App#1&登录
- 用户导航到Grails应用#1。
- app#1没有User的身份验证数据,并检查CAS服务器。 CAS服务器没有用户的cookie数据,因此CAS会提示用户登录。
- 用户登录CAS并获取有效票证。用户将从步骤1重定向回应用程序#1 URL。
- 在身份验证后的第一个请求中,app#1将CAS票证加载到其SecurityContextHolder中。后续请求使用故障单数据来验证用户是否已通过身份验证。
醇>
App#2&注销
- 用户导航到Grails app#2。
- app#2没有用户的身份验证数据,并检查CAS服务器。 CAS服务器具有用户的cookie数据,并使用此数据对用户进行身份验证。
- 在身份验证后的第一个请求中,app#2将CAS票证加载到其SecurityContextHolder中。后续请求使用故障单数据来验证用户是否已通过身份验证。
醇>
注销
- 用户通过点击app#2的注销页面退出应用#2。 app#2不再有用户数据存储在SecurityContextHolder中。
- 用户被重定向到CAS服务器注销页面。 CAS不再拥有用户的有效票证。
- 对应用#2的后续(受保护)请求会将用户重定向到CAS登录页面。
- 由于app#1在其SecurityContextHolder中仍有CAS票据数据,因此对app#1的后续(受保护)请求不会将用户重定向到登录。上下文必须以某种方式清除或过期。
醇>
我应该如何阻止用户访问应用#1中受保护的网址?我可以为SecurityContextHolder设置过期日期吗?