Spring 4 WebSocket傳送到指定使用者:convertAndSendToUser函式
阿新 • • 發佈:2019-02-14
有時推送需要推送到指定的使用者,這時就需要使用@SengToUser
註解或者convertAndSendToUser
這個函式,需要注意的是,推送到特定使用者不一定非要使用Spring Security這個框架來實現登入和訪問控制,我在專案中使用的是Apache Shiro。
在使用者登入之後,在Session裡面設定相應的Principal:
UsernamePasswordToken token = new UsernamePasswordToken(phonenum, password);
token.setRememberMe(true);
currentUser.login (token);
Session session = currentUser.getSession();
session.setAttribute("user_id", user_id);
session.setAttribute("phonenum", phonenum);
然後就可以傳送給指定使用者了:
public void handleMessage(Baobiaoorder order) {
log.info("收到來自RabbitMQ的訊息:" + order.getOuttradeno());
// operations.convertAndSend("/topic/pay-result", order);
operations.convertAndSendToUser(order.getPhonenum(), "/queue/pay-result", order);
}
其中order.getPhonenum()
便是Session裡面的手機號,因為我是把手機號作為Shiro的Principal。此時訊息會發送給/queue/pay-result
這個目的地,但是客戶端需要訂閱的是/user/queue/pay-result
。值得注意的是,按照慣例,最好把這種傳送給特定使用者的、非廣播式的目的地設定為queue而不是topic。這樣就能做到傳送訊息給指定的使用者了。