Domanda

Come posso ottenere la sessione dall'interno di un oggetto comando?

ho provato:

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

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

Questo getta

java.lang.IllegalStateException: Nessuna richiesta filo-bound trovati: Si riferisce alla richiesta attribuisce al di fuori di una richiesta web vero e proprio, o di elaborazione di una richiesta di fuori del filo originariamente riceve? Se in realtà si sta operando all'interno di una richiesta web e continua a ricevere questo messaggio, il codice viene eseguito, probabilmente al di fuori di DispatcherServlet / DispatcherPortlet:. In questo caso, l'uso RequestContextListener o RequestContextFilter per esporre la richiesta corrente

È stato utile?

Soluzione

Hai un'importazione per SecurityContextHolder di Primavera di sicurezza, ma si sta utilizzando il Grails standard di richiedere supporto. Se si sta utilizzando il plug-in Acegi, poi c'è un filtro che imposta la richiesta in un ThreadLocal gestito da org.codehaus.groovy.grails.plugins.springsecurity.SecurityRequestHolder, quindi questo funziona:

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

Si noti che è deve essere in un metodo in quanto la classe di comando verrà istanziato una o più volte in fase di avvio per l'inizializzazione, quindi è necessario accedere alla sessione e richiedere solo durante l'esecuzione di una richiesta HTTP

Altri suggerimenti

E 'anche possibile accedere alla sessione utilizzando RequestContextHolder (per evitare la Primavera di sicurezza dipendenza / import):

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

Un altro modo:

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

Nella mia app rendimenti SecurityRequestHolder.request apertura null in qualche modo, ma il modo sopra funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top