2015-09-30 21 views
16

WebSocket'e alınıyor - Ben Tutulma (yay çizme) bu çalıştırdığınızda 403 WebSocket'e - Bahar Boot uygulamasında 403 Forbidden

Yasak alınıyor ben sockjs/stompjs kullanarak istemciden WebSocket'e bağlanabilir.

Ancak websocket kodu için bir Spring önyükleme kavanozu (gradlew build) oluşturduğumda ve java-jar websocket-code.jar dosyasını çalıştırdığımda web bağlantısına bağlanan bir 403 hatası alıyorum.

Web siteleri için kimlik doğrulama yok. Bir CORS filtresine sahibim ve istek/yanıtta tüm başlıkların doğru olduğunu düşünüyorum. Aşağıda

benim build.gradle olduğunu

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' 
} 

Güncelleme:

Eklendi response.setHeader ile CORS filtresi ("Erişim Kontrol-Origin izin ver", "http://localhost:8089"); Ben gelen talep ediyorum İstemci tarafındaki Kundakçı ise

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 

Kökeni Allow-kökeni listesi içindedir. Yine de Günlükler'de Reddedilen İstek mesajını alıyorum.

cevap

2

2 ortamım arasındaki fark, kavanozların sürümüydi. Çünkü spring_version = 4.0.6.RELEASE olmak spring_version yay-WebSocket-4.1.7.RELEASE inspite kadar çekme ambalaj, yay önyükleme starterli WebSocket bağımlılık

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

.

Sorunu gideren build.gradle içindeki bağımlılığı değiştirildi.

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

Bahar-WebSocket kavanoz son sürümünde sınıf StompWebSocketEndpointRegistration used.Have bu denemedim zorundadır setAllowedOrigins yöntemi olduğunu düşünüyorum.

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

ile

Ama CORS filtre eski sürümü ile çalışıyor.

+0

Bunların hala çalışıp çalışmadığından emin değilsiniz. Benim için web soket katmanı söyleyerek kimlik bilgileri doğru olmasını gerektirir ve hatta kümemi izinlerimi CORS'e koyduğumda bile. Hala 403 yasaklıyorum – numerical25

47

Benzer bir sorunla karşılaştım ve izin verilen kökenleri "*" olarak ayarlayarak WebSocketConfig dosyasına sabitledim.

@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 
} 
+1

Teşekkür tahmin denetleyicisi @SendTo tarafından tescil edilmiştir

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

"senin uç-nokta" eklemeyi deneyin. SetAllowedOrigins'in yeni sürümde StompWebSocketEndpointRegistration'a eklendiğini düşünüyorum. Çözümünüzün yeni sürümde çalışması gerektiğini düşünüyorum. Eski websocket jar'ı olarak kullanıyorum. – user3755282

+0

magic – nurgasemetey

+4

gibi çalıştı İzin verilenler için böyle bir joker karakteri kullanmak güvensiz değil mi? – niilzon

1

Cevap için

İlgili konular