with application and java gradle websocket spring-boot sockjs

java - application - Websocket en la aplicación Spring Boot-403 Prohibido



websocket angular 6 spring boot (3)

La diferencia entre mi entorno 2 era la versión de los tarros.

spring-boot-starter-websocket-1.2.5.RELEASE.jar spring-websocket-4.1.7.RELEASE.jar

Debido a la dependencia de spring-boot-starter-websocket durante el empaquetado, estaba recogiendo spring-websocket-4.1.7.RELEASE a pesar de que spring_version es spring_version = 4.0.6.RELEASE.

Modificó la dependencia en build.gradle que solucionó el problema.

compile "org.springframework.boot:spring-boot-starter-websocket:1.1.0.RELEASE"

Creo que en la última versión de spring-websocket jar la clase StompWebSocketEndpointRegistration tiene el método setAllowedOrigins que se debe usar. No lo he intentado.

Pero el filtro de CORS con

response.setHeader("Access-Control-Allow-Origin", "http://localhost:8089");

está trabajando con la versión anterior.

Websocket en la aplicación Spring Boot - 403 Prohibido

Puedo conectarme al websocket desde el cliente usando sockjs / stompjs cuando ejecuto esto en eclipse (sin arranque de primavera).

Pero cuando creo un archivo de inicio de Spring (gradlew build) para el código websocket y ejecuto java -jar websocket-code.jar, se produce un error 403 al conectarse al websocket.

No tengo autenticación para los websockets. Tengo filtros de CORS y creo que todos los encabezados están correctos en la solicitud / respuesta.

A continuación se muestra mi build.gradle

apply plugin: ''java'' apply plugin: ''spring-boot'' apply plugin: ''war'' sourceCompatibility = 1.7 version = ''1.0'' repositories { mavenCentral() } buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE") } } configurations { compile.exclude module: "spring-boot-starter-tomcat" } dependencies { compile "org.springframework:spring-web:$spring_version" compile "org.springframework:spring-webmvc:$spring_version" compile "org.springframework:spring-websocket:$spring_version" compile "org.springframework:spring-messaging:$spring_version" compile "org.springframework.boot:spring-boot-starter-websocket" compile "org.springframework.boot:spring-boot-starter-web" compile "com.fasterxml.jackson.core:jackson-databind:2.6.2" compile "com.fasterxml.jackson.core:jackson-core:2.6.2" compile "com.fasterxml.jackson.core:jackson-annotations:2.6.2" compile "org.springframework.amqp:spring-rabbit:1.3.5.RELEASE" compile("org.springframework:spring-tx") compile("org.springframework.boot:spring-boot-starter-web:1.2.6.RELEASE") compile("org.springframework.boot:spring-boot-starter-jetty:1.2.6.RELEASE") testCompile group: ''junit'', name: ''junit'', version: ''4.11'' testCompile "org.springframework:spring-test:$spring_version" } task wrapper(type: Wrapper) { gradleVersion = ''2.5'' }

Actualizar:

Se agregó un filtro CORS con response.setHeader ("Access-Control-Allow-Origin", " http: // localhost: 8089 ");

En firebug en el lado del cliente

Request Headers Origin http://localhost:8089 Response Headers Access-Control-Allow-Origin http://localhost:8089 Server Logs 2015-10-02 16:57:31.372 DEBUG 1848 --- [qtp374030679-14] o.s.w.s.s.t.h.DefaultSockJsService : Request rejected, Origin header value http://localhost:8089 not allowed

El origen desde el que solicito está en la lista Permitir origen. Sigue recibiendo el mensaje de solicitud rechazada en los registros.


Tuve un problema similar y lo arreglé en WebSocketConfig estableciendo los orígenes permitidos en "*".

@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // the endpoint for websocket connections registry.addEndpoint("/stomp").setAllowedOrigins("*").withSockJS(); } // remaining config not shown as not relevant }


intenta agregar

registry.addEndpoint("/your-end-point").setAllowedOrigins("*").withSockJS();

"Su punto final" está registrado por @SendTo en el controlador, supongo