我實際上也是爲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/
謝謝,我遵循相同的原則,我使用了2個websocket端點(一個在同一個web應用程序中,另一個在外部),我需要兩個不同的證書嗎? –
是的,如果兩個websockets在不同的域上,並且你想在兩個域都提供WSS(SSL for websockets)!另外,您可能希望考慮爲兩個端點提供安全性覆蓋(意思是說,如果您使用的是兩個Spring應用程序,每個應用程序都有一個公開的WS端點,則每個都需要Spring Security)。但是,根據您設置的方式,您可以使用相同的身份驗證。 –
感謝亞當,這是有道理的。由於我們有2個端點,並使用相同的sockJS客戶端和sockJS限制創建2個以上的連接,所以我如何繼續處理這個問題,實際上我需要3個客戶端的sockJS連接。 –