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