1. 程式人生 > >Spring 4 WebSocket傳送到指定使用者:convertAndSendToUser函式

Spring 4 WebSocket傳送到指定使用者:convertAndSendToUser函式

有時推送需要推送到指定的使用者,這時就需要使用@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。這樣就能做到傳送訊息給指定的使用者了。