2015-09-30 13 views
16

WebSocket हो रही है - हो रही 403 निषिद्धWebSocket - स्प्रिंग बूट अनुप्रयोग में 403 निषिद्ध

मैं जब मैं (कोई वसंत बूट) ग्रहण में इस चलाने sockjs/stompjs का उपयोग कर ग्राहक से WebSocket से जुड़ सकते हैं।

लेकिन जब मैं वेबस्केट कोड के लिए स्प्रिंग बूट जार (ग्रेडलेव बिल्ड) बनाता हूं और जावा-जेजर वेबस्केट-कोड चलाता हूं .jar मुझे वेबसाईट से कनेक्ट करने में 403 त्रुटि मिलती है।

मेरे पास websockets के लिए कोई प्रमाणीकरण नहीं है। मेरे पास एक सीओआरएस फ़िल्टर है और लगता है कि अनुरोध/प्रतिक्रिया में सभी शीर्षलेख सही हैं।

नीचे मेरी 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' 
} 

अद्यतन:

जोड़ा गया response.setHeader साथ एक CORS फिल्टर ("पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति", "http://localhost:8089");

फ़ायरबग में क्लाइंट साइड पर

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 

उत्पत्ति मैं से विनती करता हूँ की अनुमति दें मूल सूची में है। अभी भी लॉग में अनुरोध अस्वीकृत संदेश प्राप्त हो रहा है।

उत्तर

2

मेरे 2 पर्यावरण के बीच अंतर जार का संस्करण था।

spring-boot-starter-websocket-1.2.5.RELEASE.jar 
spring-websocket-4.1.7.RELEASE.jar 
वसंत-बूट स्टार्टर-WebSocket निर्भरता, जबकि यह spring_version spring_version = 4.0.6.RELEASE होने के वसंत-WebSocket-4.1.7.RELEASE बावजूद उठा था पैकेजिंग की वजह से

समस्या को ठीक करने वाले build.gradle में निर्भरता को संशोधित किया गया।

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

मैं वसंत-WebSocket जार के नवीनतम संस्करण में वर्ग StompWebSocketEndpointRegistration setAllowedOrigins विधि है कि used.Have इस कोशिश की नहीं हो गया है लगता है।

लेकिन CORS

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

साथ फिल्टर पुराने संस्करण के साथ काम कर रहा है।

+0

सुनिश्चित नहीं है कि ये अभी भी काम करते हैं। मेरे लिए यह कहकर वेब सॉकेट परत को प्रमाण-पत्रों की सत्यता की आवश्यकता होती है और यहां तक ​​कि जब मैंने अपना सेट कोर को कोर में रखा है। मुझे अभी भी 403 वर्जित है – numerical25

47

मेरे पास एक समान समस्या थी और इसे अनुमति देने वाली उत्पत्ति को "*" पर सेट करके WebSocketConfig में ठीक किया गया।

@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

जवाब के लिए धन्यवाद

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

"अपने-अंत बिंदु" नियंत्रक में @SendTo द्वारा पंजीकृत है जोड़ने के लिए प्रयास करें। मुझे लगता है कि setAllowedOrigins को नई रिलीज में StompWebSocketEndpointRegistration में जोड़ा गया है। मुझे लगता है कि आपका समाधान नई रिलीज में काम करना चाहिए। मैं पुराने websocket जार के रूप में उपयोग कर रहा हूँ। – user3755282

+0

जादू की तरह काम किया – nurgasemetey

+4

क्या यह ऑरिजिन के लिए ऐसे वाइल्डकार्ड का उपयोग करने में असुरक्षित नहीं है? – niilzon

1

मुझे लगता है कि

संबंधित मुद्दे