gpt4 book ai didi

java - 如何在 Spring 5.3 及更高版本中使用 Stomp 和 SockJS 处理 CORS 起源?

转载 作者:行者123 更新时间:2023-12-03 23:33:37 25 4
gpt4 key购买 nike

我正在开发一个同时使用 REST 端点和 SockJS websocket 的服务器应用程序。这曾经在 Spring 5.2 及更低版本下工作正常。
然而,从 5.3 版本开始 ,以下方法存在于org.springframework.web.cors.CorsConfiguration中:

    public void validateAllowCredentials() {
if (this.allowCredentials == Boolean.TRUE &&
this.allowedOrigins != null && this.allowedOrigins.contains(ALL)) {

throw new IllegalArgumentException(
"When allowCredentials is true, allowedOrigins cannot contain the special value \"*\"" +
"since that cannot be set on the \"Access-Control-Allow-Origin\" response header. " +
"To allow credentials to a set of origins, list them explicitly " +
"or consider using \"allowedOriginPatterns\" instead.");
}
}
到目前为止,我的套接字配置如下:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// prefix for the client to send messages to the server
config.setApplicationDestinationPrefixes("/app");
// prefix for the client to receive broadcasted messages from the server
config.enableSimpleBroker("/topic");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// defines the url of the socket so the client can connect to it
registry.addEndpoint("/socketendpoint").setAllowedOrigins("*").withSockJS();
}
}
现在我面临一个真正的问题:
  • 如果我保留 setAllowedOrigins("*")WebSocketConfiguration ,那么我就会面临 validateAllowCredentials 中抛出的错误.
  • 如果我删除 setAllowedOrigins("*") ,那么 SockJS 客户端将收到 Error during WebSocket handshake: Unexpected response code: 403 .

  • 我在编译时不知道原始域。
    我已经尝试了 Cors 过滤器和 Cors 配置,它们使用典型的“将您在请求中找到的 origin header 返回为 allow-origin”模式,通常用于规避 allow-origin: "*" ,但有些 SockJS 请求没有 origin头分配...
    我该如何解决?

    最佳答案

    为了将来引用,随着最新的 Spring 更新,现在有一个方法 setAllowedOriginPatterns解决了这个问题:

     registry.addEndpoint("/socketendpoint").setAllowedOriginPatterns("*").withSockJS();

    关于java - 如何在 Spring 5.3 及更高版本中使用 Stomp 和 SockJS 处理 CORS 起源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65129358/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com