2011-11-20 13 views
6

Actualmente, estoy usando el objeto HttpSession defecto en ambos controladores y las páginas SPG:¿Cómo usar una sesión nativa shiro en una aplicación web Grails?

En los controladores:

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

En GSP:

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

Me gustaría tener un " recuerda mi "funcionalidad". Shiro ya lo tiene incorporado. Sin embargo, por lo que he entendido, para hacerlo debo usar el modo de sesión nativo shiro (en Config.groovy: security.shiro.session.mode = "native"). De forma predeterminada, persiste el estado de la sesión, por lo que los objetos permanecerán en la sesión siempre que la cookie caduque o el usuario cierre la sesión.

¿Entiendo bien?

Entonces voy a tener que cambiar mis controladores a esto:

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

Y mis puntos de vista a este:

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

Por lo tanto, mis preguntas son:

  • ¿Es eso cierto ?
  • ¿No puedo usar la forma anterior para acceder a la sesión?
  • ¿Debo desactivar la sesión http predeterminada en alguna configuración?
+1

no necesita la sesión nativa para utilizar "recordarme". – user852518

+0

¿qué sugieres? ¿Puedes señalarme algunos enlaces? Probé la sesión nativa después de leer esta publicación: http://grails.1312388.n4.nabble.com/Forcing-authentication-of-user-in-Grails-filter-using-Shiro-tp3698679p3702316.html – r0drigopaes

+0

Desde: https: //grails.org/plugin/shiro mira el control de acceso por convención. Usted acaba de configurar '' 'accessControl (auth: false)' '' en '' 'SecurityUtils.groovy'''. Debería funcionar si está pasando la bandera rememberMe correctamente. –

Respuesta

1

Dejé de mantener los objetos en la sesión persistentemente (hasta que la cookie caduque). Esto es lo que hice:

En el método de inicio de sesión en el controlador:

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

El primer "si" comprueba si la sesión tiene el objeto que necesito.

El método configureSession pone en la sesión toda la información que necesito.

Cuestiones relacionadas