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 в контроллере. Думаю,