类org.springframework.messaging.support.ImmutableMessageChannelInterceptor源码实例Demo

下面列出了怎么用org.springframework.messaging.support.ImmutableMessageChannelInterceptor的API类实例代码及写法,或者点击链接到github查看源代码。

private boolean detectImmutableMessageInterceptor(MessageChannel channel) {
	if (this.immutableMessageInterceptorPresent != null) {
		return this.immutableMessageInterceptorPresent;
	}

	if (channel instanceof AbstractMessageChannel) {
		for (ChannelInterceptor interceptor : ((AbstractMessageChannel) channel).getInterceptors()) {
			if (interceptor instanceof ImmutableMessageChannelInterceptor) {
				this.immutableMessageInterceptorPresent = true;
				return true;
			}
		}
	}
	this.immutableMessageInterceptorPresent = false;
	return false;
}
 
@Test
public void clientInboundChannelSendMessage() throws Exception {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("clientInboundChannel", TestChannel.class);
	SubProtocolWebSocketHandler webSocketHandler = config.getBean(SubProtocolWebSocketHandler.class);

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	TestWebSocketSession session = new TestWebSocketSession("s1");
	session.setOpen(true);
	webSocketHandler.afterConnectionEstablished(session);

	webSocketHandler.handleMessage(session,
			StompTextMessageBuilder.create(StompCommand.SEND).headers("destination:/foo").build());

	Message<?> message = channel.messages.get(0);
	StompHeaderAccessor accessor = StompHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
	assertNotNull(accessor);
	assertFalse(accessor.isMutable());
	assertEquals(SimpMessageType.MESSAGE, accessor.getMessageType());
	assertEquals("/foo", accessor.getDestination());
}
 
@Test // SPR-14690
public void handleMessageFromClientWithTokenAuthentication() {
	ExecutorSubscribableChannel channel = new ExecutorSubscribableChannel();
	channel.addInterceptor(new AuthenticationInterceptor("[email protected]"));
	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("[email protected]", user.getName());
}
 
private boolean detectImmutableMessageInterceptor(MessageChannel channel) {
	if (this.immutableMessageInterceptorPresent != null) {
		return this.immutableMessageInterceptorPresent;
	}

	if (channel instanceof AbstractMessageChannel) {
		for (ChannelInterceptor interceptor : ((AbstractMessageChannel) channel).getInterceptors()) {
			if (interceptor instanceof ImmutableMessageChannelInterceptor) {
				this.immutableMessageInterceptorPresent = true;
				return true;
			}
		}
	}
	this.immutableMessageInterceptorPresent = false;
	return false;
}
 
@Test
public void clientInboundChannelSendMessage() throws Exception {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("clientInboundChannel", TestChannel.class);
	SubProtocolWebSocketHandler webSocketHandler = config.getBean(SubProtocolWebSocketHandler.class);

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	TestWebSocketSession session = new TestWebSocketSession("s1");
	session.setOpen(true);
	webSocketHandler.afterConnectionEstablished(session);

	webSocketHandler.handleMessage(session,
			StompTextMessageBuilder.create(StompCommand.SEND).headers("destination:/foo").build());

	Message<?> message = channel.messages.get(0);
	StompHeaderAccessor accessor = StompHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
	assertNotNull(accessor);
	assertFalse(accessor.isMutable());
	assertEquals(SimpMessageType.MESSAGE, accessor.getMessageType());
	assertEquals("/foo", accessor.getDestination());
}
 
@Test // SPR-14690
public void handleMessageFromClientWithTokenAuthentication() {
	ExecutorSubscribableChannel channel = new ExecutorSubscribableChannel();
	channel.addInterceptor(new AuthenticationInterceptor("[email protected]"));
	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("[email protected]", user.getName());
}
 
private boolean detectImmutableMessageInterceptor(MessageChannel channel) {
	if (this.immutableMessageInterceptorPresent != null) {
		return this.immutableMessageInterceptorPresent;
	}

	if (channel instanceof AbstractMessageChannel) {
		for (ChannelInterceptor interceptor : ((AbstractMessageChannel) channel).getInterceptors()) {
			if (interceptor instanceof ImmutableMessageChannelInterceptor) {
				this.immutableMessageInterceptorPresent = true;
				return true;
			}
		}
	}
	this.immutableMessageInterceptorPresent = false;
	return false;
}
 
@Test
public void clientInboundChannelSendMessage() throws Exception {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("clientInboundChannel", TestChannel.class);
	SubProtocolWebSocketHandler webSocketHandler = config.getBean(SubProtocolWebSocketHandler.class);

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	TestWebSocketSession session = new TestWebSocketSession("s1");
	session.setOpen(true);
	webSocketHandler.afterConnectionEstablished(session);

	TextMessage textMessage = StompTextMessageBuilder.create(StompCommand.SEND).headers("destination:/foo").build();
	webSocketHandler.handleMessage(session, textMessage);

	Message<?> message = channel.messages.get(0);
	StompHeaderAccessor accessor = StompHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
	assertNotNull(accessor);
	assertFalse(accessor.isMutable());
	assertEquals(SimpMessageType.MESSAGE, accessor.getMessageType());
	assertEquals("/foo", accessor.getDestination());
}
 
protected final ChannelRegistration getClientInboundChannelRegistration() {
	if (this.clientInboundChannelRegistration == null) {
		ChannelRegistration registration = new ChannelRegistration();
		configureClientInboundChannel(registration);
		registration.interceptors(new ImmutableMessageChannelInterceptor());
		this.clientInboundChannelRegistration = registration;
	}
	return this.clientInboundChannelRegistration;
}
 
protected final ChannelRegistration getClientOutboundChannelRegistration() {
	if (this.clientOutboundChannelRegistration == null) {
		ChannelRegistration registration = new ChannelRegistration();
		configureClientOutboundChannel(registration);
		registration.interceptors(new ImmutableMessageChannelInterceptor());
		this.clientOutboundChannelRegistration = registration;
	}
	return this.clientOutboundChannelRegistration;
}
 
@Bean
public AbstractSubscribableChannel brokerChannel() {
	ChannelRegistration reg = getBrokerRegistry().getBrokerChannelRegistration();
	ExecutorSubscribableChannel channel = (reg.hasTaskExecutor() ?
			new ExecutorSubscribableChannel(brokerChannelExecutor()) : new ExecutorSubscribableChannel());
	reg.interceptors(new ImmutableMessageChannelInterceptor());
	channel.setLogger(SimpLogging.forLog(channel.getLogger()));
	channel.setInterceptors(reg.getInterceptors());
	return channel;
}
 
@Test
public void clientOutboundChannel() {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("clientOutboundChannel", TestChannel.class);
	Set<MessageHandler> handlers = channel.getSubscribers();

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	assertEquals(1, handlers.size());
	assertTrue(handlers.contains(config.getBean(SubProtocolWebSocketHandler.class)));
}
 
@Test
public void brokerChannel() {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("brokerChannel", TestChannel.class);
	Set<MessageHandler> handlers = channel.getSubscribers();

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	assertEquals(2, handlers.size());
	assertTrue(handlers.contains(config.getBean(SimpleBrokerMessageHandler.class)));
	assertTrue(handlers.contains(config.getBean(UserDestinationMessageHandler.class)));
}
 
private void testChannel(
		String channelName, List<Class<? extends  MessageHandler>> subscriberTypes, int interceptorCount) {

	AbstractSubscribableChannel channel = this.appContext.getBean(channelName, AbstractSubscribableChannel.class);
	for (Class<? extends  MessageHandler> subscriberType : subscriberTypes) {
		MessageHandler subscriber = this.appContext.getBean(subscriberType);
		assertNotNull("No subscription for " + subscriberType, subscriber);
		assertTrue(channel.hasSubscription(subscriber));
	}
	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(interceptorCount, interceptors.size());
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());
}
 
protected final ChannelRegistration getClientInboundChannelRegistration() {
	if (this.clientInboundChannelRegistration == null) {
		ChannelRegistration registration = new ChannelRegistration();
		configureClientInboundChannel(registration);
		registration.interceptors(new ImmutableMessageChannelInterceptor());
		this.clientInboundChannelRegistration = registration;
	}
	return this.clientInboundChannelRegistration;
}
 
protected final ChannelRegistration getClientOutboundChannelRegistration() {
	if (this.clientOutboundChannelRegistration == null) {
		ChannelRegistration registration = new ChannelRegistration();
		configureClientOutboundChannel(registration);
		registration.interceptors(new ImmutableMessageChannelInterceptor());
		this.clientOutboundChannelRegistration = registration;
	}
	return this.clientOutboundChannelRegistration;
}
 
@Bean
public AbstractSubscribableChannel brokerChannel() {
	ChannelRegistration reg = getBrokerRegistry().getBrokerChannelRegistration();
	ExecutorSubscribableChannel channel = (reg.hasTaskExecutor() ?
			new ExecutorSubscribableChannel(brokerChannelExecutor()) : new ExecutorSubscribableChannel());
	reg.interceptors(new ImmutableMessageChannelInterceptor());
	channel.setLogger(SimpLogging.forLog(channel.getLogger()));
	channel.setInterceptors(reg.getInterceptors());
	return channel;
}
 
@Test
public void clientOutboundChannel() {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("clientOutboundChannel", TestChannel.class);
	Set<MessageHandler> handlers = channel.getSubscribers();

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	assertEquals(1, handlers.size());
	assertTrue(handlers.contains(config.getBean(SubProtocolWebSocketHandler.class)));
}
 
@Test
public void brokerChannel() {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("brokerChannel", TestChannel.class);
	Set<MessageHandler> handlers = channel.getSubscribers();

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	assertEquals(2, handlers.size());
	assertTrue(handlers.contains(config.getBean(SimpleBrokerMessageHandler.class)));
	assertTrue(handlers.contains(config.getBean(UserDestinationMessageHandler.class)));
}
 
private void testChannel(
		String channelName, List<Class<? extends  MessageHandler>> subscriberTypes, int interceptorCount) {

	AbstractSubscribableChannel channel = this.appContext.getBean(channelName, AbstractSubscribableChannel.class);
	for (Class<? extends  MessageHandler> subscriberType : subscriberTypes) {
		MessageHandler subscriber = this.appContext.getBean(subscriberType);
		assertNotNull("No subscription for " + subscriberType, subscriber);
		assertTrue(channel.hasSubscription(subscriber));
	}
	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(interceptorCount, interceptors.size());
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());
}
 
protected final ChannelRegistration getClientInboundChannelRegistration() {
	if (this.clientInboundChannelRegistration == null) {
		ChannelRegistration registration = new ChannelRegistration();
		configureClientInboundChannel(registration);
		registration.setInterceptors(new ImmutableMessageChannelInterceptor());
		this.clientInboundChannelRegistration = registration;
	}
	return this.clientInboundChannelRegistration;
}
 
protected final ChannelRegistration getClientOutboundChannelRegistration() {
	if (this.clientOutboundChannelRegistration == null) {
		ChannelRegistration registration = new ChannelRegistration();
		configureClientOutboundChannel(registration);
		registration.setInterceptors(new ImmutableMessageChannelInterceptor());
		this.clientOutboundChannelRegistration = registration;
	}
	return this.clientOutboundChannelRegistration;
}
 
@Bean
public AbstractSubscribableChannel brokerChannel() {
	ChannelRegistration reg = getBrokerRegistry().getBrokerChannelRegistration();
	ExecutorSubscribableChannel channel = reg.hasTaskExecutor() ?
			new ExecutorSubscribableChannel(brokerChannelExecutor()) : new ExecutorSubscribableChannel();
	reg.setInterceptors(new ImmutableMessageChannelInterceptor());
	channel.setInterceptors(reg.getInterceptors());
	return channel;
}
 
@Test
public void clientOutboundChannel() {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("clientOutboundChannel", TestChannel.class);
	Set<MessageHandler> handlers = channel.getSubscribers();

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	assertEquals(1, handlers.size());
	assertTrue(handlers.contains(config.getBean(SubProtocolWebSocketHandler.class)));
}
 
@Test
public void brokerChannel() {
	ApplicationContext config = createConfig(TestChannelConfig.class, TestConfigurer.class);
	TestChannel channel = config.getBean("brokerChannel", TestChannel.class);
	Set<MessageHandler> handlers = channel.getSubscribers();

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());

	assertEquals(2, handlers.size());
	assertTrue(handlers.contains(config.getBean(SimpleBrokerMessageHandler.class)));
	assertTrue(handlers.contains(config.getBean(UserDestinationMessageHandler.class)));
}
 
private void testChannel(String channelName, List<Class<? extends  MessageHandler>> subscriberTypes,
		int interceptorCount) {

	AbstractSubscribableChannel channel = this.appContext.getBean(channelName, AbstractSubscribableChannel.class);

	for (Class<? extends  MessageHandler> subscriberType : subscriberTypes) {
		MessageHandler subscriber = this.appContext.getBean(subscriberType);
		assertNotNull("No subsription for " + subscriberType, subscriber);
		assertTrue(channel.hasSubscription(subscriber));
	}

	List<ChannelInterceptor> interceptors = channel.getInterceptors();
	assertEquals(interceptorCount, interceptors.size());
	assertEquals(ImmutableMessageChannelInterceptor.class, interceptors.get(interceptors.size()-1).getClass());
}
 
@Bean
public GlobalChannelInterceptorWrapper testInterceptor() {
	return new GlobalChannelInterceptorWrapper(
			new ImmutableMessageChannelInterceptor());
}
 
 类方法
 同包方法