Add an option to set an Origin whitelist for Websocket and SockJS
This commit introduces a new OriginHandshakeInterceptor. It filters Origin header value against a list of allowed origins. AbstractSockJsService as been modified to: - Reject CORS requests with forbidden origins - Disable transport types that does not support CORS when an origin check is required - Use the Origin request header value instead of "*" for Access-Control-Allow-Origin response header value (mandatory when Access-Control-Allow-Credentials=true) - Return CORS header only if the request contains an Origin header It is possible to configure easily this behavior thanks to JavaConfig API WebSocketHandlerRegistration#addAllowedOrigins(String...) and StompWebSocketEndpointRegistration#addAllowedOrigins(String...). It is also possible to configure it using the websocket XML namespace. Please notice that this commit does not change the default behavior: cross origin requests are still enabled by default. Issues: SPR-12226
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
</websocket:decorator-factories>
|
||||
</websocket:transport>
|
||||
|
||||
<websocket:stomp-endpoint path=" /foo,/bar">
|
||||
<websocket:stomp-endpoint path=" /foo,/bar" allowed-origins="http://mydomain1.com,http://mydomain2.com">
|
||||
<websocket:handshake-handler ref="myHandler"/>
|
||||
<websocket:handshake-interceptors>
|
||||
<bean class="org.springframework.web.socket.config.FooTestInterceptor"/>
|
||||
@@ -23,7 +23,7 @@
|
||||
</websocket:handshake-interceptors>
|
||||
</websocket:stomp-endpoint>
|
||||
|
||||
<websocket:stomp-endpoint path="/test,/sockjs">
|
||||
<websocket:stomp-endpoint path="/test,/sockjs" allowed-origins="http://mydomain3.com,http://mydomain4.com">
|
||||
<websocket:handshake-handler ref="myHandler"/>
|
||||
<websocket:handshake-interceptors>
|
||||
<bean class="org.springframework.web.socket.config.FooTestInterceptor"/>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd">
|
||||
|
||||
<websocket:handlers order="2">
|
||||
<websocket:handlers order="2" allowed-origins="http://mydomain1.com, http://mydomain2.com">
|
||||
<websocket:mapping path="/foo" handler="fooHandler"/>
|
||||
<websocket:mapping path="/test" handler="testHandler"/>
|
||||
<websocket:handshake-handler ref="testHandshakeHandler"/>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd">
|
||||
|
||||
<websocket:handlers >
|
||||
<websocket:handlers allowed-origins="http://mydomain1.com, http://mydomain2.com">
|
||||
<websocket:mapping path="/test" handler="testHandler"/>
|
||||
<websocket:sockjs name="testSockJsService" scheduler="testTaskScheduler" websocket-enabled="false"
|
||||
session-cookie-needed="false" stream-bytes-limit="2048" disconnect-delay="256"
|
||||
|
||||
Reference in New Issue
Block a user