2015-09-30 14 views
16

Websocket im Frühjahr Boot-App - Getting 403Websocket im Frühjahr Boot-App - Getting 403 Forbidden

Verbotene

Ich kann an die websocket von Client verbinden sockjs/stompjs verwenden, wenn ich dies in Eclipse laufen (keine Feder-Boot).

Aber wenn ich ein Spring boot jar (grodlew build) für den websocket-Code erstellen und java -jar websocket-code.jar ausführen, bekomme ich einen Fehler 403 beim Verbinden mit dem Websocket.

Ich habe keine Authentifizierung für die Websockets. Ich habe einen CORS-Filter und denke, alle Header direkt in Anfrage/Antwort haben.

Unten ist mein 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' 
} 

Update:

Added ein CORS-Filter mit response.setHeader ("Access-Control-Allow-Origin", "http://localhost:8089");

In Firebug auf Client-Seite

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 

Herkunft ich aus bin anfordernden ist in der Allow-Origin-Liste. Es wird immer noch die Nachricht "Abgelehnte Anfrage" in den Protokollen angezeigt.

Antwort

2

Der Unterschied zwischen meiner 2 Umgebung war die Version der Gläser.

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

Wegen der Feder-boot-Starter-websocket Abhängigkeit, während der Verpackung wurde verwarnt feder websocket-4.1.7.RELEASE trotz der spring_version seiner spring_version = 4.0.6.RELEASE.

Die Abhängigkeit in build.gradle wurde geändert, die das Problem behoben hat.

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

Ich denke, in neuester Version von feder websocket jar die Klasse StompWebSocketEndpointRegistration setAllowedOrigins Methode verfügt, die used.Have nicht versucht, diese werden muss.

Aber CORS-Filter mit

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

mit älterer Version arbeiten.

+0

Nicht sicher, ob diese noch funktioniert. Für mich sagt der Web-Socket-Layer Anmeldeinformationen, um wahr zu sein, und auch wenn ich meinen Satz meine Erlaubnis Ursprünge in die CORS setzen. Ich bekomme immer noch eine 403 verboten – numerical25

47

Ich hatte ein ähnliches Problem und behoben es in der WebSocketConfig, indem Sie die zulässigen Ursprünge auf "*" setzen.

+1

Danke für die Antwort erraten. Ich denke, setAllowedOrigins wurde zu StompWebSocketEndpointRegistration in der neuen Version hinzugefügt. Ich denke, Ihre Lösung sollte in einer neuen Version funktionieren. Ich verwende als älteres Websocket-Glas. – user3755282

+0

Arbeitete wie Magie – nurgasemetey

+4

ist es nicht unsicher, einen solchen Platzhalter für erlaubteOrigins zu verwenden? – niilzon

1

versuchen

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

"Ihr-End-Punkt" hinzufügen wird von @SendTo in Controller registriert ich

Verwandte Themen