Browse Source

WebSocket namespace consistently applies resolvable allowed-origins value

Issue: SPR-13760
(cherry picked from commit cd4ce87)
pull/931/head
Juergen Hoeller 10 years ago
parent
commit
d03d8cb456
  1. 14
      spring-websocket/src/main/java/org/springframework/web/socket/config/WebSocketNamespaceUtils.java

14
spring-websocket/src/main/java/org/springframework/web/socket/config/WebSocketNamespaceUtils.java

@ -45,7 +45,6 @@ import org.springframework.web.socket.sockjs.transport.handler.WebSocketTranspor
*/ */
class WebSocketNamespaceUtils { class WebSocketNamespaceUtils {
public static RuntimeBeanReference registerHandshakeHandler(Element element, ParserContext context, Object source) { public static RuntimeBeanReference registerHandshakeHandler(Element element, ParserContext context, Object source) {
RuntimeBeanReference handlerRef; RuntimeBeanReference handlerRef;
Element handlerElem = DomUtils.getChildElementByTagName(element, "handshake-handler"); Element handlerElem = DomUtils.getChildElementByTagName(element, "handshake-handler");
@ -62,7 +61,7 @@ class WebSocketNamespaceUtils {
return handlerRef; return handlerRef;
} }
public static RuntimeBeanReference registerSockJsService(Element element, String sockJsSchedulerName, public static RuntimeBeanReference registerSockJsService(Element element, String schedulerName,
ParserContext context, Object source) { ParserContext context, Object source) {
Element sockJsElement = DomUtils.getChildElementByTagName(element, "sockjs"); Element sockJsElement = DomUtils.getChildElementByTagName(element, "sockjs");
@ -79,7 +78,7 @@ class WebSocketNamespaceUtils {
scheduler = new RuntimeBeanReference(customTaskSchedulerName); scheduler = new RuntimeBeanReference(customTaskSchedulerName);
} }
else { else {
scheduler = registerSockJsScheduler(sockJsSchedulerName, context, source); scheduler = registerScheduler(schedulerName, context, source);
} }
sockJsServiceDef.getConstructorArgumentValues().addIndexedArgumentValue(0, scheduler); sockJsServiceDef.getConstructorArgumentValues().addIndexedArgumentValue(0, scheduler);
@ -94,7 +93,6 @@ class WebSocketNamespaceUtils {
} }
else if (handshakeHandler != null) { else if (handshakeHandler != null) {
RuntimeBeanReference handshakeHandlerRef = new RuntimeBeanReference(handshakeHandler.getAttribute("ref")); RuntimeBeanReference handshakeHandlerRef = new RuntimeBeanReference(handshakeHandler.getAttribute("ref"));
RootBeanDefinition transportHandler = new RootBeanDefinition(WebSocketTransportHandler.class); RootBeanDefinition transportHandler = new RootBeanDefinition(WebSocketTransportHandler.class);
transportHandler.setSource(source); transportHandler.setSource(source);
transportHandler.getConstructorArgumentValues().addIndexedArgumentValue(0, handshakeHandlerRef); transportHandler.getConstructorArgumentValues().addIndexedArgumentValue(0, handshakeHandlerRef);
@ -106,7 +104,9 @@ class WebSocketNamespaceUtils {
String allowedOriginsAttribute = element.getAttribute("allowed-origins"); String allowedOriginsAttribute = element.getAttribute("allowed-origins");
List<String> allowedOrigins = Arrays.asList(StringUtils.tokenizeToStringArray(allowedOriginsAttribute, ",")); List<String> allowedOrigins = Arrays.asList(StringUtils.tokenizeToStringArray(allowedOriginsAttribute, ","));
sockJsServiceDef.getPropertyValues().add("allowedOrigins", allowedOrigins); sockJsServiceDef.getPropertyValues().add("allowedOrigins", allowedOrigins);
interceptors.add(new OriginHandshakeInterceptor(allowedOrigins)); RootBeanDefinition originHandshakeInterceptor = new RootBeanDefinition(OriginHandshakeInterceptor.class);
originHandshakeInterceptor.getPropertyValues().add("allowedOrigins", allowedOrigins);
interceptors.add(originHandshakeInterceptor);
sockJsServiceDef.getPropertyValues().add("handshakeInterceptors", interceptors); sockJsServiceDef.getPropertyValues().add("handshakeInterceptors", interceptors);
String attrValue = sockJsElement.getAttribute("name"); String attrValue = sockJsElement.getAttribute("name");
@ -156,7 +156,7 @@ class WebSocketNamespaceUtils {
return null; return null;
} }
private static RuntimeBeanReference registerSockJsScheduler(String schedulerName, ParserContext context, Object source) { public static RuntimeBeanReference registerScheduler(String schedulerName, ParserContext context, Object source) {
if (!context.getRegistry().containsBeanDefinition(schedulerName)) { if (!context.getRegistry().containsBeanDefinition(schedulerName)) {
RootBeanDefinition taskSchedulerDef = new RootBeanDefinition(ThreadPoolTaskScheduler.class); RootBeanDefinition taskSchedulerDef = new RootBeanDefinition(ThreadPoolTaskScheduler.class);
taskSchedulerDef.setSource(source); taskSchedulerDef.setSource(source);
@ -174,7 +174,7 @@ class WebSocketNamespaceUtils {
ManagedList<? super Object> beans = new ManagedList<Object>(); ManagedList<? super Object> beans = new ManagedList<Object>();
if (parentElement != null) { if (parentElement != null) {
beans.setSource(context.extractSource(parentElement)); beans.setSource(context.extractSource(parentElement));
for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, new String[] {"bean", "ref"})) { for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, "bean", "ref")) {
beans.add(context.getDelegate().parsePropertySubElement(beanElement, null)); beans.add(context.getDelegate().parsePropertySubElement(beanElement, null));
} }
} }

Loading…
Cancel
Save