Java在websocket獲取Httpsession及bean無法注入問題


問題細節:  在tomcat8和spring4下搭建了websocket的聊天室,websocket服務端無法注入業務處理的所需要的service bean,致使websocket無法向activemq發送消息。並且還要解決獲取httpsession問題。

1.出現問題的源代碼

@ServerEndpoint(value="/chat")

public class ChatServer {
@OnMessage
    public void onMessage(String _message, Session session){
        //省略無關代碼
        System.out.println("p:" + producer);
        producer.sendMessage(destination,_message);
    }
}

發現producer是null,最后找到一篇博客解決問題,鏈接:http://www.bubuko.com/infodetail-1045860.html

解決方法也很簡單,如下

@ServerEndpoint(value="/chat",configurator =  SpringConfigurator.class)

2.隨后根據網上教程獲取Httpsession,獲取Httpsession鏈接:https://www.cnblogs.com/zhaoww/p/5119706.html?utm_source=tuicool&utm_medium=referral

但是在@ServerEndpoint注解里面添加configurator屬性出現問題,這樣設置要會導致之前的空指針錯誤,畢竟configurator不能同時獲取兩個類。

@ServerEndpoint(value="/socketTest",configurator=GetHttpSessionConfigurator.class)

1.解決問題源代碼

在獲取Httpsession教程的基礎上進行修改

package com.ws.chat;

import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;

import org.springframework.web.socket.server.standard.SpringConfigurator;

public class NewConfigurator extends SpringConfigurator {
    @Override
    public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest request, HandshakeResponse response) {
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        config.getUserProperties().put(HttpSession.class.getName(), httpSession);
    }
}

然后在@ServerEndpoint注解里面添加configurator屬性

@ServerEndpoint(value="/chat",configurator =  NewConfigurator.class)

這樣修改就能做到既可以獲取Httpsession又可以解決bean無法注入的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM