Websocket в Spring Загрузочное приложение - Получение 403 Запрещено

Websocket в Spring загрузочном приложении - получение запрета 403

Я могу подключиться к websocket от клиента, используя sockjs/stompjs, когда я запускаю его в eclipse (без Spring загрузки).

Но когда я создаю jQuery-jar-jar файл java -jar websocket-code.jar, я создаю загрузочный jar (wow) для ws-wap() для создания кода websocket. Я получаю ошибку 403, подключаемую к websocket.

У меня нет аутентификации для веб-узлов. У меня есть фильтры CORS и думаю, что все заголовки находятся в запросе/ответе.

Ниже мой 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:

Добавлен фильтр CORS с response.setHeader( "Access-Control-Allow-Origin", "http://localhost:8089" );

В firebug со стороны клиента

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

Происхождение, которое я запрашиваю, находится в списке Allow-origin. Все еще получаю сообщение "Отклонено" в журналах.

Ответы

Ответ 1

Разница между моей средой 2 была версией банок.

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

Из-за зависимости spring -boot-starter-websocket во время упаковки он собирал spring -websocket-4.1.7.RELEASE воодушевлял spring_version как spring_version = 4.0.6.RELEASE.

Изменена зависимость в build.gradle, которая устранила проблему.

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

Я думаю, что в последней версии spring -websocket jar класс StompWebSocketEndpointRegistration имеет метод setAllowedOrigins, который должен использоваться. Не пробовал это.

Но фильтр CORS с

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

работает со старой версией.

Ответ 2

У меня была аналогичная проблема и исправлена ​​в 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
}

Ответ 3

попытайтесь добавить

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

"ваша конечная точка" зарегистрирована @SendTo в контроллере. Думаю,