@Nullable protected String getUserName(Message<?> message, MessageHeaders headers) { Principal principal = SimpMessageHeaderAccessor.getUser(headers); if (principal != null) { return (principal instanceof DestinationUserNameProvider ? ((DestinationUserNameProvider) principal).getDestinationUserName() : principal.getName()); } return null; }
@Override public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception { Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); if (user == null) { throw new MissingSessionUserException(message); } return user; }
@Nullable private ParseResult parseSubscriptionMessage(Message<?> message, String sourceDestination) { MessageHeaders headers = message.getHeaders(); String sessionId = SimpMessageHeaderAccessor.getSessionId(headers); if (sessionId == null) { logger.error("No session id. Ignoring " + message); return null; } int prefixEnd = this.prefix.length() - 1; String actualDestination = sourceDestination.substring(prefixEnd); if (isRemoveLeadingSlash()) { actualDestination = actualDestination.substring(1); } Principal principal = SimpMessageHeaderAccessor.getUser(headers); String user = (principal != null ? principal.getName() : null); Set<String> sessionIds = Collections.singleton(sessionId); return new ParseResult(sourceDestination, actualDestination, sourceDestination, sessionIds, user); }
private StringBuilder getBaseLogMessage() { StringBuilder sb = new StringBuilder(); SimpMessageType messageType = getMessageType(); sb.append(messageType != null ? messageType.name() : SimpMessageType.OTHER); String destination = getDestination(); if (destination != null) { sb.append(" destination=").append(destination); } String subscriptionId = getSubscriptionId(); if (subscriptionId != null) { sb.append(" subscriptionId=").append(subscriptionId); } sb.append(" session=").append(getSessionId()); Principal user = getUser(); if (user != null) { sb.append(" user=").append(user.getName()); } return sb; }
Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); if (user != null) { accessor.setUser(user);
@Test public void handleMessageFromClient() { TextMessage textMessage = StompTextMessageBuilder.create(StompCommand.CONNECT).headers( "login:guest", "passcode:guest", "accept-version:1.1,1.0", "heart-beat:10000,10000").build(); this.protocolHandler.afterSessionStarted(this.session, this.channel); this.protocolHandler.handleMessageFromClient(this.session, textMessage, this.channel); verify(this.channel).send(this.messageCaptor.capture()); Message<?> actual = this.messageCaptor.getValue(); assertNotNull(actual); assertEquals("s1", SimpMessageHeaderAccessor.getSessionId(actual.getHeaders())); assertNotNull(SimpMessageHeaderAccessor.getSessionAttributes(actual.getHeaders())); assertNotNull(SimpMessageHeaderAccessor.getUser(actual.getHeaders())); assertEquals("joe", SimpMessageHeaderAccessor.getUser(actual.getHeaders()).getName()); assertNotNull(SimpMessageHeaderAccessor.getHeartbeat(actual.getHeaders())); assertArrayEquals(new long[] {10000, 10000}, SimpMessageHeaderAccessor.getHeartbeat(actual.getHeaders())); StompHeaderAccessor stompAccessor = StompHeaderAccessor.wrap(actual); assertEquals(StompCommand.CONNECT, stompAccessor.getCommand()); assertEquals("guest", stompAccessor.getLogin()); assertEquals("guest", stompAccessor.getPasscode()); assertArrayEquals(new long[] {10000, 10000}, stompAccessor.getHeartbeat()); assertEquals(new HashSet<>(Arrays.asList("1.1","1.0")), stompAccessor.getAcceptVersion()); assertEquals(0, this.session.getSentMessages().size()); }
@Test public void connect() { String id = "sess1"; Message<String> connectMessage = startSession(id); Message<?> connectAckMessage = this.messageCaptor.getValue(); SimpMessageHeaderAccessor connectAckHeaders = SimpMessageHeaderAccessor.wrap(connectAckMessage); assertEquals(connectMessage, connectAckHeaders.getHeader(SimpMessageHeaderAccessor.CONNECT_MESSAGE_HEADER)); assertEquals(id, connectAckHeaders.getSessionId()); assertEquals("joe", connectAckHeaders.getUser().getName()); assertArrayEquals(new long[] {10000, 10000}, SimpMessageHeaderAccessor.getHeartbeat(connectAckHeaders.getMessageHeaders())); }
long[] heartbeatIn = SimpMessageHeaderAccessor.getHeartbeat(headers); long[] heartbeatOut = getHeartbeatValue(); Principal user = SimpMessageHeaderAccessor.getUser(headers); MessageChannel outChannel = getClientOutboundChannelForSession(sessionId); this.sessions.put(sessionId, new SessionInfo(sessionId, user, outChannel, heartbeatIn, heartbeatOut)); logMessage(message); if (sessionId != null) { Principal user = SimpMessageHeaderAccessor.getUser(headers); handleDisconnect(sessionId, user, message);
@Test // SPR-14690 public void handleMessageFromClientWithTokenAuthentication() { ExecutorSubscribableChannel channel = new ExecutorSubscribableChannel(); channel.addInterceptor(new AuthenticationInterceptor("__pete__@gmail.com")); channel.addInterceptor(new ImmutableMessageChannelInterceptor()); TestMessageHandler messageHandler = new TestMessageHandler(); channel.subscribe(messageHandler); StompSubProtocolHandler handler = new StompSubProtocolHandler(); handler.afterSessionStarted(this.session, channel); TextMessage wsMessage = StompTextMessageBuilder.create(StompCommand.CONNECT).build(); handler.handleMessageFromClient(this.session, wsMessage, channel); assertEquals(1, messageHandler.getMessages().size()); Message<?> message = messageHandler.getMessages().get(0); Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); assertNotNull(user); assertEquals("__pete__@gmail.com", user.getName()); }
@Test public void subscribeDisconnectPublish() { String sess1 = "sess1"; String sess2 = "sess2"; startSession(sess1); startSession(sess2); this.messageHandler.handleMessage(createSubscriptionMessage(sess1, "sub1", "/foo")); this.messageHandler.handleMessage(createSubscriptionMessage(sess1, "sub2", "/foo")); this.messageHandler.handleMessage(createSubscriptionMessage(sess1, "sub3", "/bar")); this.messageHandler.handleMessage(createSubscriptionMessage(sess2, "sub1", "/foo")); this.messageHandler.handleMessage(createSubscriptionMessage(sess2, "sub2", "/foo")); this.messageHandler.handleMessage(createSubscriptionMessage(sess2, "sub3", "/bar")); SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.DISCONNECT); headers.setSessionId(sess1); headers.setUser(new TestPrincipal("joe")); Message<byte[]> message = MessageBuilder.createMessage(new byte[0], headers.getMessageHeaders()); this.messageHandler.handleMessage(message); this.messageHandler.handleMessage(createMessage("/foo", "message1")); this.messageHandler.handleMessage(createMessage("/bar", "message2")); verify(this.clientOutChannel, times(4)).send(this.messageCaptor.capture()); Message<?> captured = this.messageCaptor.getAllValues().get(2); assertEquals(SimpMessageType.DISCONNECT_ACK, SimpMessageHeaderAccessor.getMessageType(captured.getHeaders())); assertSame(message, captured.getHeaders().get(SimpMessageHeaderAccessor.DISCONNECT_MESSAGE_HEADER)); assertEquals(sess1, SimpMessageHeaderAccessor.getSessionId(captured.getHeaders())); assertEquals("joe", SimpMessageHeaderAccessor.getUser(captured.getHeaders()).getName()); assertTrue(messageCaptured(sess2, "sub1", "/foo")); assertTrue(messageCaptured(sess2, "sub2", "/foo")); assertTrue(messageCaptured(sess2, "sub3", "/bar")); }
@Override public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception { Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); if (user == null) { throw new MissingSessionUserException(message); } return user; }
@Nullable protected String getUserName(Message<?> message, MessageHeaders headers) { Principal principal = SimpMessageHeaderAccessor.getUser(headers); if (principal != null) { return (principal instanceof DestinationUserNameProvider ? ((DestinationUserNameProvider) principal).getDestinationUserName() : principal.getName()); } return null; }
@Nullable private ParseResult parseSubscriptionMessage(Message<?> message, String sourceDestination) { MessageHeaders headers = message.getHeaders(); String sessionId = SimpMessageHeaderAccessor.getSessionId(headers); if (sessionId == null) { logger.error("No session id. Ignoring " + message); return null; } int prefixEnd = this.prefix.length() - 1; String actualDestination = sourceDestination.substring(prefixEnd); if (isRemoveLeadingSlash()) { actualDestination = actualDestination.substring(1); } Principal principal = SimpMessageHeaderAccessor.getUser(headers); String user = (principal != null ? principal.getName() : null); Set<String> sessionIds = Collections.singleton(sessionId); return new ParseResult(sourceDestination, actualDestination, sourceDestination, sessionIds, user); }
private StringBuilder getBaseLogMessage() { StringBuilder sb = new StringBuilder(); SimpMessageType messageType = getMessageType(); sb.append(messageType != null ? messageType.name() : SimpMessageType.OTHER); String destination = getDestination(); if (destination != null) { sb.append(" destination=").append(destination); } String subscriptionId = getSubscriptionId(); if (subscriptionId != null) { sb.append(" subscriptionId=").append(subscriptionId); } sb.append(" session=").append(getSessionId()); Principal user = getUser(); if (user != null) { sb.append(" user=").append(user.getName()); } return sb; }
Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); if (user != null) { accessor.setUser(user);
long[] heartbeatIn = SimpMessageHeaderAccessor.getHeartbeat(headers); long[] heartbeatOut = getHeartbeatValue(); Principal user = SimpMessageHeaderAccessor.getUser(headers); MessageChannel outChannel = getClientOutboundChannelForSession(sessionId); this.sessions.put(sessionId, new SessionInfo(sessionId, user, outChannel, heartbeatIn, heartbeatOut)); logMessage(message); if (sessionId != null) { Principal user = SimpMessageHeaderAccessor.getUser(headers); handleDisconnect(sessionId, user, message);
@Nullable protected String getUserName(Message<?> message, MessageHeaders headers) { Principal principal = SimpMessageHeaderAccessor.getUser(headers); if (principal != null) { return (principal instanceof DestinationUserNameProvider ? ((DestinationUserNameProvider) principal).getDestinationUserName() : principal.getName()); } return null; }
@Nullable protected String getUserName(Message<?> message, MessageHeaders headers) { Principal principal = SimpMessageHeaderAccessor.getUser(headers); if (principal != null) { return (principal instanceof DestinationUserNameProvider ? ((DestinationUserNameProvider) principal).getDestinationUserName() : principal.getName()); } return null; }
@Override public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception { Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); if (user == null) { throw new MissingSessionUserException(message); } return user; }
/** * 사용자의 모든 Activity 를 전달 받습니다. (추후 그룹단위로 Activity Queue 분할 검토) * * @param accessor * @throws Exception */ @MessageMapping("/activities/add") public void addActivity(SimpMessageHeaderAccessor accessor, ActivityStreamV2 activity) throws Exception { LOGGER.debug("User({}, {}) activity recevied : {}", accessor.getUser().getName(), accessor.getSessionId(), activity.getType(), activity.getObject()); activityStreamService.addActivity(activity, accessor.getUser()); }