我正在使用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事件!
请给我一些想法来解决这个问题......解决方法也许......谢谢
答案 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)
}
然后,您需要使用您找到的会话上下文中的身份验证提供当前会话上下文。确保在处理完请求后重置身份验证。
这有帮助吗?