Grails jms和atmosphere plugin null springSecurityService注入服务

时间:2012-08-27 15:12:18

标签: grails dependency-injection spring-security jms atmosphere

你好!

我正在使用grails jms和氛围插件......

尝试将springSecurityService注入时  Jms-Atmosphere Service类,当存在对该对象的引用时,principal / currentUser为null(springSecurityService不为null)

//Grails Service class
class UserMessageService {

        static transactional = true
        static exposes = ['jms']
        static destination = "queue.usermessage"

        def jmsService
        def springSecurityService

        public def onMessage(msg) {
           sleep(2000) // slow it down
           log.info "sending jms mssage"
           //User is null!!
           User user = springSecurityService.currentUser

           jmsService.send(topic:'msgevent', msg)

           return null
        }
}

所以我想知道......
它是一个插件问题,还是从jms插件中监听事件(作为事件监听器)的问题? 使用Atmosphere插件使用Atmosphere Hander即服务时遇到同样的问题!在这种情况下,氛围服务也必须暴露于jms事件! 请给我一些想法来解决这个问题......解决方法也许......谢谢

1 个答案:

答案 0 :(得分:0)

我猜你的特定电话中没有设置cookie。你在使用websocket吗?确保您已获得Atmosphere 1.0.0并启用了会话支持!然后,您仍然需要从原始请求中获取身份验证:

if(resource.writer instanceof WebsocketResponseWriter) {
    AtmosphereResource resource = resource.atmosphereResource
    SecurityContext sessionContext = resource.session
       .getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY)
}

然后,您需要使用您找到的会话上下文中的身份验证提供当前会话上下文。确保在处理完请求后重置身份验证。

这有帮助吗?