我已根據堆棧溢出跟蹤Quetion1和Quetion2,以根據會話標識發送消息給特定客戶端,但無法找到成功消息。春季會議+春季網絡插座。根據會話ID向特定客戶端發送消息
下面是我的樣品RestController類
@RestController
public class SpringSessionTestApi {
@Autowired
public SimpMessageSendingOperations messagingTemplate;
@MessageMapping("/messages")
public void greeting(HelloMessage message, SimpMessageHeaderAccessor headerAccessor) throws Exception {
String sessionId = (String) headerAccessor.getSessionAttributes().get("SPRING.SESSION.ID");
messagingTemplate.convertAndSendToUser(sessionId,"/queue/test",message, createHeaders(sessionId));
}
private MessageHeaders createHeaders(String sessionId) {
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
headerAccessor.setSessionId(sessionId);
headerAccessor.setLeaveMutable(true);
return headerAccessor.getMessageHeaders();
}
}
會話ID:當客戶端發送了createSession請求,新的彈簧的sessionId產生並同樣被儲存在MongoDB的爲好。之後,當客戶端發送Web套接字連接請求時,會收到相同的sessionId,並按預期存儲在mongoDb中。直到這一切工作正常。
現在我的工作是根據sessionId將響應發送回客戶端。 對於我有以下的網絡套接字類:
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig extends
AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession> {
@Override
protected void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/messages");
}
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue");
registry.setApplicationDestinationPrefixes("/app");
}
}
和我使用的連接樣本客戶端代碼:
function connect() {
stompClient = Stomp.client('ws://localhost:8016/messages');
stompClient.debug = null;
stompClient.connect({}, function (frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/user/queue/test', function (greeting) {
console.log("Hello "+greeting);
console.log("Greeting body "+JSON.parse(greeting.body));
});
});
}
請幫幫忙,我哪裏做錯了在這? 在此先感謝!
我只看到配置,看不到應該向用戶發送響應的類 – Sarief
@Sarief據我所知,「convertAndSendToUser()」方法會向特定用戶發送響應。對不起,我不明白你在問什麼? – Akshada
hm。沒有看到它。你需要使用用戶名,而不是會話ID。它使用spring安全並通過Authority.class的用戶名查找用戶。這就是說,你的用戶堅持春季安全嗎? – Sarief