2017-05-06 64 views
0

由spring.io和http://www.baeldung.com/websockets-spring提供的示例有助於在客戶端和服務器之間創建websocket連接,但我的情況是。 - 有人從UI創建消息傳遞給Spring控制器(獨立控制器)。 - 從這個控制器我需要通知/發送/廣播此消息到所有連接的客戶端。 - 如何將消息傳遞給接收消息的控制器的處理程序。 我也在這裏參考WebSocket with Sockjs & Spring 4 but without Stomp,併發布相同的問題。帶彈簧的Websocket mvc,stomp,sockjs,angular JS

有人可以幫助我,在此先感謝!

回答

1

我實際上也是爲Baeldung寫的,現在正在撰寫一篇關於如何在Spring中爲websockets添加安全性的小文章!只需幾個步驟即可完成所有工作! (因爲你說UI已經完成或正在構建,我只關注後端),它實際上涉及三個部分:(1)必要的POJO,控制器和配置。

你的POJO將非常簡單 - 在這裏我們只是使用Greeting和Message來指定一個名稱和基本的文本數據類型(我將跳過這裏以節省空間,但你可以在下面的資源中看到它)。

你的控制器看起來就像這樣:

@Controller 
public class GreetingController { 

    @MessageMapping("/hello") 
    @SendTo("/topic/greetings") 
    public Greeting greeting(HelloMessage message) throws Exception { 
     Thread.sleep(1000); // simulated delay 
     return new Greeting("Hello, " + message.getName() + "!"); 
    } 

} 

看看註釋 - 這些都是真的什麼脫穎而出該控制器從說正常的休息控制器。

,並且配置是這樣的 - 再看看註釋 - 特別是「@EnableWebSocketMessageBroker」 - 和類「AbstractWebSocketMessageBrokerConfigurer」:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/gs-guide-websocket").withSockJS(); 
    } 
} 

一看這巨大的資源太:https://spring.io/guides/gs/messaging-stomp-websocket/

+0

謝謝,我遵循相同的原則,我使用了2個websocket端點(一個在同一個web應用程序中,另一個在外部),我需要兩個不同的證書嗎? –

+0

是的,如果兩個websockets在不同的域上,並且你想在兩個域都提供WSS(SSL for websockets)!另外,您可能希望考慮爲兩個端點提供安全性覆蓋(意思是說,如果您使用的是兩個Spring應用程序,每個應用程序都有一個公開的WS端點,則每個都需要Spring Security)。但是,根據您設置的方式,您可以使用相同的身份驗證。 –

+0

感謝亞當,這是有道理的。由於我們有2個端點,並使用相同的sockJS客戶端和sockJS限制創建2個以上的連接,所以我如何繼續處理這個問題,實際上我需要3個客戶端的sockJS連接。 –