如何清除apache shiro会话?

时间:2013-11-21 16:13:44

标签: grails shiro

我使用apache shiro会话进行身份验证和授权。

能够以不同的用户和权限和角色登录,但实际问题是每当我调用signOut函数时,shiro会话似乎都没有被删除。

显而易见的是,无论何时我点击退出它都会出现在主屏幕上,如果我使用浏览器后退按钮,我可以回到最后一个屏幕。

我的signOut功能如下所示

// Log the user out of the application.
SecurityUtils.subject?.logout()
webRequest.getCurrentRequest().session = null
session.invalidate()    

// For now, redirect back to the home page.
redirect(uri: "/")

对此的任何帮助都非常感谢过去2天的挣扎

2 个答案:

答案 0 :(得分:1)

这适用于shiro插件的1.1.4版本。

def logOut() {
    SecurityUtils.subject?.logout()

    redirect(uri: "/")
}

答案 1 :(得分:1)

这是由于浏览器缓存造成的。您可以配置为在ShiroSecurityFilters文件中重置浏览器缓存。

 class ShiroSecurityFilters {
 def filters = {
    requestHeadersFilter(controller: '*', action: '*') {
             after = {
            response.setHeader("Pragma", "no-cache")
            response.setDateHeader("Expires", 0)
            response.setHeader("Cache-Control", "no-cache")
            response.addHeader("Cache-Control", "no-store")
        }
    }