Pregunta

¿Cómo puedo obtener la sesión desde un objeto de comando?

He intentado:

import org.springframework.security.context.SecurityContextHolder as SCH

class MyCommand {
   def session = RCH.currentRequestAttributes().getSession()
}

Esto arroja

java.lang.IllegalStateException: No hay petición de hilo atado encontrado: ¿Usted se refiere a la solicitud atributos fuera de una solicitud web actual o procesar una solicitud fuera de la rosca originalmente recibir? Si en realidad se está operando dentro de una petición web y sigue recibiendo este mensaje, su código es probable que se ejecuta fuera de DispatcherServlet / DispatcherPortlet:. En este caso, el uso RequestContextListener o RequestContextFilter para exponer la petición actual

¿Fue útil?

Solución

tiene una importación de SecurityContextHolder de primavera de Seguridad, sino que está utilizando el estándar Griales solicitar soporte. Si estás usando el plugin de Acegi, entonces no hay un filtro que establece la petición en un ThreadLocal gestionado por org.codehaus.groovy.grails.plugins.springsecurity.SecurityRequestHolder, por lo que esto va a funcionar:

import org.codehaus.groovy.grails.plugins.springsecurity.SecurityRequestHolder as SRH
class MyCommand {
   def someMethod() {
      def session = SRH.request.session
   }
}

Tenga en cuenta que es tiene que estar en un método ya que la clase de comando se creará una instancia de una o más veces durante el inicio de la inicialización, por lo que necesita para acceder a la sesión y solicitar sólo durante la ejecución de una petición HTTP

Otros consejos

También es posible acceder a la sesión utilizando RequestContextHolder (para evitar la dependencia de la primavera de Seguridad / importación):

import org.springframework.web.context.request.RequestContextHolder as RCH
class MyCommand {
   def someMethod() {
       def session = RCH.requestAttributes.session
   }
}

Otra forma:

import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
HttpSession session = GrailsWebRequest.lookup().currentRequest.session

En mi aplicación vuelve SecurityRequestHolder.request null alguna manera, pero la forma por encima de las obras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top