2013-11-21 73 views
1

我使用apache 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: "/") 

这个真的很感激任何帮助,从最近两天

+0

您正在使用哪种版本的Grails的四郎插件? – j4y

+0

上午使用shiro 1.2.0 –

回答

1

这对我的作品与四郎插件的版本1.1.4版挣扎了这一点。

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

    redirect(uri: "/") 
} 
+1

我也使用相同的代码注销,但shiro的会话仍然active.If我使用浏览器的后退按钮,我可以回到上一页。如果我离开它约1小时shior的会话超时,一切正常 –

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") 
     } 
    }