grails - 如何在 Grails Web 应用程序中使用 shiro native session ?

标签 grails shiro session-management

目前,我在 Controller 和 gsp 页面中使用默认的 HttpSession 对象:

在 Controller 中:

...
session.mykey = anObject;  // adding an object to session
...
if (session.otherkey) {    // performing some checking

在普惠制中:

...
<g:if test="${session.mykey}">
...

我想要一个“记住我”的功能。 Shiro 已经内置了它。但是,据我了解,为了做到这一点,我必须使用 shiro native session 模式(在 Config.groovy 中:security.shiro.session.mode="native")。默认情况下,它会保留 session 状态,因此只要 cookie 过期或用户注销,对象就会保留在 session 中。

我的理解对吗?

然后我必须将我的 Controller 更改为:

def shiroSession = SecurityUtils.subject.session
shiroSession.setAttribute("mykey",anObject)
....
if (shiroSession.getAttribute("otherkey") ){

我对此的看法:

<g:if test="${SecurityUtils.subject.session.getAttribute('mykey')}">

所以,我的问题是:

  • 是吗?
  • 我不能使用之前的方式来访问 session 吗?
  • 我是否必须在某些配置中关闭默认的 http session ?

最佳答案

我放弃了在 session 中持久保留对象(直到 cookie 过期)。这是我所做的:

在 Controller 中的登录方法中:

if (! session.currentProfile){
    Subject currentUser = SecurityUtils.getSubject()
if (currentUser.isRemembered()){
    boolean success = configureSession(session, currentUser.getPrincipal())
        if (success){
        ... 
        }
    }
    ....
}

第一个“if”检查 session 是否有我需要的对象。

configureSession 方法将我需要的所有信息放入 session 中。

关于grails - 如何在 Grails Web 应用程序中使用 shiro native session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8205027/

相关文章:

grails - STS - Grails 透视损坏。看不到服务

grails - 在 Grails URL 中包含名称

grails - 为什么使用与配置的 SpringBean 名称相同的操作名称会导致 ClassCastException?

java - 将 Apache Shiro 安全库与基于 Dropwizard 的 JAX-RS 应用程序集成

java - 没有重定向的 Shiro 过滤器

ajax - 普惠制 g :submitToRemote call injecting unwanted encoded square brackets around ID

Tapestry apache shiro requireroles 注释

asp.net - 使用 Oracle 10g 数据库进行 ASP.NET session 管理

java - 使用 Ehcache 的 WebApp session 管理