我有两个使用JASIG CAS Client Plugin的独立 Grails 应用程序。当我的应用程序运行时,不同的用户可以对我的 CAS 服务器进行身份验证(使用客户端插件)。
除了身份验证,我在两个应用程序中都使用 Grails 过滤器进行授权。用户可能已通过身份验证,但我想确保只有某些用户才能访问适当的应用程序。
一切正常,除了以下情况:
- 我使用用户名“jack”成功地对 CAS 服务器进行了身份验证,并且我被授权使用应用程序 A。
- 我关闭应用程序 A 并退出 CAS。
- 我使用用户名“jill”成功对 CAS 服务器进行身份验证,但我无权使用应用程序 B,因为会话中的用户名仍然是“jack”
当我的应用程序启动时,我是否需要随时刷新会话?如果是这样,我该怎么做?这是我的过滤器的代码:
import edu.yale.its.tp.cas.client.filter.CASFilter
class SecurityFilters {
def filters = {
loginCheck(controller: '*', action: '*') {
before = {
def username = session?.getAttribute(CASFilter.CAS_FILTER_USER)?.toLowerCase()
if (username in grailsApplication.config.users) {
return true
} else {
render view: '/invalid_user', model: [username: username]
return false
}
}
}
}
}