Example usage for org.springframework.web.socket WebSocketSession getPrincipal

List of usage examples for org.springframework.web.socket WebSocketSession getPrincipal

Introduction

In this page you can find the example usage for org.springframework.web.socket WebSocketSession getPrincipal.

Prototype

@Nullable
Principal getPrincipal();

Source Link

Document

Return a java.security.Principal instance containing the name of the authenticated user.

Usage

From source file:ch.rasc.wampspring.message.UnsubscribeMessage.java

/**
 * Creates an internal unsubscribe message. The system creates this message when the
 * WebSocket session ends and sends it to the subscribed message handlers for cleaning
 * up/*ww w.j  ava  2s  .co m*/
 *
 * @param sessionId the WebSocket session id
 **/
public static UnsubscribeMessage createCleanupMessage(WebSocketSession session) {
    UnsubscribeMessage msg = new UnsubscribeMessage("**");

    msg.setWebSocketSessionId(session.getId());
    msg.setPrincipal(session.getPrincipal());
    msg.setWampSession(new WampSession(session));

    msg.cleanup = true;

    return msg;
}

From source file:ch.rasc.wampspring.message.WampMessage.java

public static <T extends WampMessage> T fromJson(WebSocketSession session, JsonFactory jsonFactory, String json)
        throws IOException {

    WampSession wampSession = new WampSession(session);

    T newWampMessage = fromJson(jsonFactory, json, wampSession);

    newWampMessage.setWebSocketSessionId(session.getId());
    newWampMessage.setPrincipal(session.getPrincipal());
    newWampMessage.setWampSession(wampSession);

    return newWampMessage;
}

From source file:com.devicehive.websockets.ClientWebSocketHandler.java

@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    super.afterConnectionEstablished(session);

    HiveWebsocketSessionState state = (HiveWebsocketSessionState) session.getAttributes()
            .get(HiveWebsocketSessionState.KEY);
    session.getAttributes().put(WebSocketAuthenticationManager.SESSION_ATTR_AUTHENTICATION,
            session.getPrincipal());
    state.setEndpoint(HiveEndpoint.CLIENT);
}

From source file:com.devicehive.websockets.DeviceWebSocketHandler.java

@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    super.afterConnectionEstablished(session);

    HiveWebsocketSessionState state = (HiveWebsocketSessionState) session.getAttributes()
            .get(HiveWebsocketSessionState.KEY);
    session.getAttributes().put(WebSocketAuthenticationManager.SESSION_ATTR_AUTHENTICATION,
            session.getPrincipal());
    state.setEndpoint(HiveEndpoint.DEVICE);
}

From source file:dk.apaq.orderly.CallHandler.java

private synchronized void presenter(final WebSocketSession session, BroadcastMessage message)
        throws IOException {
    Authentication auth = (Authentication) session.getPrincipal();
    auth = SecurityContextHolder.getContext().getAuthentication();
    if (presenterUserSession == null) {
        presenterUserSession = new UserSession(session, objectMapper);

        pipeline = kurento.createMediaPipeline();

        presenterUserSession.setWebRtcEndpoint(new WebRtcEndpoint.Builder(pipeline).build());

        WebRtcEndpoint presenterWebRtc = presenterUserSession.getWebRtcEndpoint();

        presenterWebRtc.addOnIceCandidateListener(new EventListener<OnIceCandidateEvent>() {

            @Override/*from  w  ww  .j  a v  a 2s.c om*/
            public void onEvent(OnIceCandidateEvent event) {
                BroadcastMessageResponse response = new BroadcastMessageResponse(
                        BroadcastMessageType.IceCandidate,
                        dk.apaq.orderly.model.IceCandidate.fromOrg(event.getCandidate()));
                try {
                    synchronized (session) {
                        session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));
                    }
                } catch (IOException e) {
                    log.debug(e.getMessage());
                }
            }
        });

        String sdpOffer = message.getSdpOffer();
        String sdpAnswer = presenterWebRtc.processOffer(sdpOffer);

        BroadcastMessageResponse response = new BroadcastMessageResponse(BroadcastMessageType.PresenterResponse,
                BroadcastMessageResponseType.Accepted);
        response.setSdpAnswer(sdpAnswer);

        synchronized (session) {
            presenterUserSession.sendMessage(response);
        }
        presenterWebRtc.gatherCandidates();

    } else {
        BroadcastMessageResponse response = new BroadcastMessageResponse(BroadcastMessageType.PresenterResponse,
                BroadcastMessageResponseType.Rejected,
                "Another user is currently acting as sender. Try again later ...");
        session.sendMessage(new TextMessage(objectMapper.writeValueAsString(response)));
    }
}

From source file:org.springframework.messaging.simp.stomp.StompProtocolHandler.java

/**
 * Handle incoming WebSocket messages from clients.
 *///from www.  java  2s.  c o  m
public void handleMessageFromClient(WebSocketSession session, WebSocketMessage webSocketMessage,
        MessageChannel outputChannel) {

    try {
        Assert.isInstanceOf(TextMessage.class, webSocketMessage);
        String payload = ((TextMessage) webSocketMessage).getPayload();
        Message<?> message = this.stompMessageConverter.toMessage(payload);

        // TODO: validate size limits
        // http://stomp.github.io/stomp-specification-1.2.html#Size_Limits

        if (logger.isTraceEnabled()) {
            logger.trace("Processing STOMP message: " + message);
        }

        try {
            StompHeaderAccessor headers = StompHeaderAccessor.wrap(message);
            headers.setSessionId(session.getId());
            headers.setUser(session.getPrincipal());

            message = MessageBuilder.withPayloadAndHeaders(message.getPayload(), headers).build();

            if (SimpMessageType.CONNECT.equals(headers.getMessageType())) {
                handleConnect(session, message);
            }

            outputChannel.send(message);

        } catch (Throwable t) {
            logger.error("Terminating STOMP session due to failure to send message: ", t);
            sendErrorMessage(session, t);
        }

        // TODO: send RECEIPT message if incoming message has "receipt" header
        // http://stomp.github.io/stomp-specification-1.2.html#Header_receipt

    } catch (Throwable error) {
        sendErrorMessage(session, error);
    }
}

From source file:org.springframework.messaging.simp.stomp.StompProtocolHandler.java

protected void handleConnect(WebSocketSession session, Message<?> message) throws IOException {

    StompHeaderAccessor connectHeaders = StompHeaderAccessor.wrap(message);
    StompHeaderAccessor connectedHeaders = StompHeaderAccessor.create(StompCommand.CONNECTED);

    Set<String> acceptVersions = connectHeaders.getAcceptVersion();
    if (acceptVersions.contains("1.2")) {
        connectedHeaders.setVersion("1.2");
    } else if (acceptVersions.contains("1.1")) {
        connectedHeaders.setVersion("1.1");
    } else if (acceptVersions.isEmpty()) {
        // 1.0/*from   w ww  . ja v  a 2s. c  o m*/
    } else {
        throw new StompConversionException("Unsupported version '" + acceptVersions + "'");
    }
    connectedHeaders.setHeartbeat(0, 0); // TODO

    Principal principal = session.getPrincipal();
    if (principal != null) {
        connectedHeaders.setNativeHeader(CONNECTED_USER_HEADER, principal.getName());
        connectedHeaders.setNativeHeader(QUEUE_SUFFIX_HEADER, session.getId());

        if (this.queueSuffixResolver != null) {
            String suffix = session.getId();
            this.queueSuffixResolver.addQueueSuffix(principal.getName(), session.getId(), suffix);
        }
    }

    // TODO: security

    Message<?> connectedMessage = MessageBuilder.withPayloadAndHeaders(new byte[0], connectedHeaders).build();
    byte[] bytes = this.stompMessageConverter.fromMessage(connectedMessage);
    session.sendMessage(new TextMessage(new String(bytes, Charset.forName("UTF-8"))));
}

From source file:org.springframework.messaging.simp.stomp.StompProtocolHandler.java

@Override
public void afterSessionEnded(WebSocketSession session, CloseStatus closeStatus, MessageChannel outputChannel) {

    if ((this.queueSuffixResolver != null) && (session.getPrincipal() != null)) {
        this.queueSuffixResolver.removeQueueSuffix(session.getPrincipal().getName(), session.getId());
    }// www  .jav a  2s .c  om

    StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.DISCONNECT);
    headers.setSessionId(session.getId());
    Message<?> message = MessageBuilder.withPayloadAndHeaders(new byte[0], headers).build();
    outputChannel.send(message);
}

From source file:org.springframework.messaging.simp.stomp.StompWebSocketHandler.java

/**
 * Handle incoming WebSocket messages from clients.
 *//* ww  w.  j  a v  a  2s.  c o  m*/
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) {
    try {
        String payload = textMessage.getPayload();
        Message<?> message = this.stompMessageConverter.toMessage(payload);

        // TODO: validate size limits
        // http://stomp.github.io/stomp-specification-1.2.html#Size_Limits

        if (logger.isTraceEnabled()) {
            logger.trace("Processing STOMP message: " + message);
        }

        try {
            StompHeaderAccessor headers = StompHeaderAccessor.wrap(message);
            headers.setSessionId(session.getId());
            headers.setUser(session.getPrincipal());
            message = MessageBuilder.withPayloadAndHeaders(message.getPayload(), headers).build();

            if (SimpMessageType.CONNECT.equals(headers.getMessageType())) {
                handleConnect(session, message);
            }

            this.dispatchChannel.send(message);

        } catch (Throwable t) {
            logger.error("Terminating STOMP session due to failure to send message: ", t);
            sendErrorMessage(session, t);
        }

        // TODO: send RECEIPT message if incoming message has "receipt" header
        // http://stomp.github.io/stomp-specification-1.2.html#Header_receipt

    } catch (Throwable error) {
        sendErrorMessage(session, error);
    }
}

From source file:org.springframework.messaging.simp.stomp.StompWebSocketHandler.java

protected void handleConnect(WebSocketSession session, Message<?> message) throws IOException {

    StompHeaderAccessor connectHeaders = StompHeaderAccessor.wrap(message);
    StompHeaderAccessor connectedHeaders = StompHeaderAccessor.create(StompCommand.CONNECTED);

    Set<String> acceptVersions = connectHeaders.getAcceptVersion();
    if (acceptVersions.contains("1.2")) {
        connectedHeaders.setAcceptVersion("1.2");
    } else if (acceptVersions.contains("1.1")) {
        connectedHeaders.setAcceptVersion("1.1");
    } else if (acceptVersions.isEmpty()) {
        // 1.0//from w w  w.  j a v a 2  s.c  om
    } else {
        throw new StompConversionException("Unsupported version '" + acceptVersions + "'");
    }
    connectedHeaders.setHeartbeat(0, 0); // TODO

    Principal principal = session.getPrincipal();
    if (principal != null) {
        connectedHeaders.setNativeHeader(CONNECTED_USER_HEADER, principal.getName());
        connectedHeaders.setNativeHeader(QUEUE_SUFFIX_HEADER, session.getId());

        if (this.queueSuffixResolver != null) {
            String suffix = session.getId();
            this.queueSuffixResolver.addQueueSuffix(principal.getName(), session.getId(), suffix);
        }
    }

    // TODO: security

    Message<?> connectedMessage = MessageBuilder.withPayloadAndHeaders(new byte[0], connectedHeaders).build();
    byte[] bytes = this.stompMessageConverter.fromMessage(connectedMessage);
    session.sendMessage(new TextMessage(new String(bytes, Charset.forName("UTF-8"))));
}