Spring Boot应用程序中的Websocket-禁止使用403

Spring Boot" title="Spring Boot">Spring Boot应用程序中的Websocket-禁止使用403

当我在eclipse中运行时(无需Spring Boot),我可以使用sockjs / stompjs从客户端连接到Websocket。

但是,当我为websocket代码创建一个Spring引导jar(gradlew构建)并运行java -jar websocket-

code.jar时,我收到一个403错误,连接到websocket。

我没有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'

}

更新:

添加了带有response.setHeader(“ Access-Control-Allow-Origin”,“ http://

localhost:8089 ”)的CORS过滤器;

在客户端的萤火虫中

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个环境之间的区别是jars的版本。

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");

正在使用旧版本。

以上是 Spring Boot应用程序中的Websocket-禁止使用403 的全部内容, 来源链接: utcz.com/qa/419635.html

回到顶部