【发布时间】:2015-09-02 15:58:38
【问题描述】:
我尝试为 Grails 覆盖 spring websocket plugin 的默认配置,如下所示:
@Configuration
@EnableWebSocketMessageBroker
class CorsWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
void configureMessageBroker(MessageBrokerRegistry messageBrokerRegistry) {
messageBrokerRegistry.enableSimpleBroker "/queue", "/topic"
messageBrokerRegistry.setApplicationDestinationPrefixes "/app"
}
@Override
void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
StompWebSocketEndpointRegistration registration = stompEndpointRegistry.addEndpoint("/stomp")
registration.setAllowedOrigins('http://localhost', 'http://localhost:8080')
registration.withSockJS().setSupressCors(false)
}
// [...]
}
我也尝试过执行 .setAllowedOrigins('*'),但它仍然无法正常工作。
但是,当我注册我的客户端时,“Access-Control-Allow-Origin”标头从未在 /stomp/info 端点上设置。我总是得到“XMLHttpRequest 无法加载 http://localhost:8080/app/stomp/info。请求的资源上没有 'Access-Control-Allow-Origin' 标头。因此不允许访问 Origin 'http://localhost'。”
【问题讨论】:
-
您是否将该配置类定义为 bean?例如我将它添加到插件自述文件中提到的resources.groovy?除此之外,cors 默认是启用的(所以不需要 setSuppressCors(false))。
-
是的,我做到了。我将 CorsWebSocketConfig.groovy 文件放在 src/groovy/my/package 文件夹中,并在 resources.groovy 中定义了一个 bean 作为 webSocketConfig my.package.CorsWebSocketConfig
标签: grails grails-plugin spring-websocket