IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 解决springboot2.5.6版本 websocket跨域的问题 -> 正文阅读

[网络协议]解决springboot2.5.6版本 websocket跨域的问题

1.springboot升级版本以后websocket连接出现以下错误:

	java.lang.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.

2.参考网上的博客,都是让我重写addCorsMappings方法,或者重新设置CoresFilter

网上的方法1:

@Configuration public class WebMvcConfig implements WebMvcConfigurer {
/**
* 开启跨域
/
@Override
public void addCorsMappings(CorsRegistry registry) {
// 设置允许跨域的路由
registry.addMapping("/**")
// 设置允许跨域请求的域名
.allowedOriginPatterns("
")
// 是否允许证书(cookies)
.allowCredentials(true)
// 设置允许的方法
.allowedMethods("*")
// 跨域允许时间
.maxAge(3600);
} }

网上的方法2:

@Bean
public CorsFilter corsFilter() {
// 1.配置CORS信息
CorsConfiguration config = new CorsConfiguration();
// 哪些原始域需要放行
config.addAllowedOriginPattern(""); // config.addAllowedOrigin("");
// 哪些原始域需要放行(请求方式)
config.addAllowedMethod("");
// 放行哪些原始域(头部信息)
config.addAllowedHeader("
");
// 是否发送Cookie信息
config.setAllowCredentials(true);
// 暴露哪些头部信息(因为跨域访问默认,所以不能获取到全部的头部信息)
config.addExposedHeader(HttpHeaders.LOCATION);
config.setExposedHeaders(Arrays.asList(“JSESSIONID”, “SESSION”, “token”, HttpHeaders.LOCATION,
HttpHeaders.ACCEPT, HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS,
HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS,
HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, HttpHeaders.COOKIE, HttpHeaders.SET_COOKIE,
HttpHeaders.SET_COOKIE2));
// 2.添加映射路径实例
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
// 3.返回新的CorsFilter.
return new CorsFilter(configSource);
}

3.照着网上说的方法都试了一遍,还是报错,怀疑配置不生效,于是在网上找了一遍博客,照着源码debug,果然前面说的整改方法整改后的配置都没用到,连接websocket的时候实际用的是另外一个配置,所以还是报同样的错误

参考博客地址

报错的源码,满足报错的条件,所以抛出异常
在这里插入图片描述

配置没生效,这里实际用的是另外一个allowedOrigins,在SockJsServiceRegistration里面设置
在这里插入图片描述

4.检查自己的SockJs连接的配置,发现了新大陆,将他改为setAllowedOriginPatterns即可

@Configuration @EnableWebSocketMessageBroker public class
WebSocketAutoConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/om-websocket")     //开启/bullet端点
            //.setAllowedOrigins("*")             //允许跨域访问
            .setAllowedOriginPatterns("*")   //使用这个
            .withSockJS();                      //使用sockJS
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {

    //订阅Broker名称
    //registry.enableSimpleBroker("/topic","/user");
    registry.enableSimpleBroker("/websocket");
    //全局使用的订阅前缀(客户端订阅路径上会体现出来)
    //registry.setApplicationDestinationPrefixes("/app/");
    //
    //点对点使用的订阅前缀(客户端订阅路径上会体现出来),不设置的话,默认也是/user/
    //registry.setUserDestinationPrefix("/user/");
} }

总结

这个乌龙让我调测了两天,主要还是过于相信网上的博客,认为照着网上的来配置问题就能解决,遇到问题首先应该检查自己的代码,而不是过于相信网上的博客,自己写的代码不一定和网上的一样,同时也应该自己去看源码,找到问题的根因

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:28:41  更:2021-11-25 08:28:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:44:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码