普元PAS部署springboot项目访问500

news2025/1/12 1:05:03

背景

项目需要从东方通部署迁移到普元PAS部署。记录一下遇到的问题

问题一 WebSocket启动异常: Error creating bean with name ‘serverEndpoint’ defined in class path resource

因为SpringBoot默认使用的容器是tomcat 对应的Websocket实现
在这里插入图片描述
PAS中直接使用@ServerEndpoint注解在类上即可启用websocket不需要配置bean ServerEndpointExporter
Springboot项目集成websocket后在国产部署PAS(普元)处理

问题二 Websocket连接不支持 //

ws://localhost:8080/websocket-echo/echo (成功)
ws://localhost:8080//websocket-echo/echo (失败)
在tomcat中两种都可以

HTTP RFC 2396 将路径分隔符定义为单斜线.

但是,除非您使用某种 URL 重写(在这种情况下重写规则可能会受到斜杠数量的影响),uri 映射到磁盘上的路径,但在(大多数?)现代操作系统中(Linux/Unix, Windows),连续多个路径分隔符没有任何特殊意义,所以/path/to/foo 和/path//tofoo 最终会映射到同一个文件.

另外一个可能受到影响的事情是缓存.由于您的浏览器和服务器都会缓存单个页面(根据它们的缓存设置),通过稍微不同的 URI 多次请求相同的文件可能会影响缓存(取决于服务器和客户端的实现).

问题三 服务启动成功后接口500

错误日志 preset Context-Type ‘text/html;charset=UTF-8’
通过和tomcat部署的服务对应,跟踪代码是 contentType返回导致响应类型异常。 正常应该是application/json

在这里插入图片描述
引入普元工程中的jar包进行调试最终定位到 (只粘贴了主要逻辑)

 public String getHeader(String name) {
        if (name != null && !name.isEmpty()) {
            String result = this.handleGetSpecialHeader(name);
            return result != null ? result : this.headers.getHeader(name);
        } else {
            return null;
        }
    }
 private final String handleGetSpecialHeader(String name) {
        return isSpecialHeader(name) ? this.getValueBasedOnHeader(name) : null;
    }
 private static boolean isSpecialHeader(char c) {
        return c == 'C' || c == 'c' || c == 'U' || c == 'u';
    }
private String getValueBasedOnHeader(String name) {
        if (Header.ContentType.toString().equalsIgnoreCase(name)) {
            String value = this.getContentType();
            if (value != null) {
                return value;
            }
        } else if (Header.ContentLength.toString().equalsIgnoreCase(name)) {
            long value = this.getContentLength();
            if (value >= 0L) {
                return Long.toString(value);
            }
        } else if (Header.Upgrade.toString().equalsIgnoreCase(name)) {
            return this.getUpgrade();
        }

        return null;
    }

跟踪到这来大概就知道了估计是有过滤器设置了response 的setContentType导致的
查看线程堆找到了对应的过滤器 (处理跨域的) 实际项目部署用不着,删除即可

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        if (HttpMethod.OPTIONS.matches(request.getMethod())) {
            response.setStatus(HttpStatus.OK.value());
            return;
        }
        filterChain.doFilter(request, response);
    }

最后对比tomcat的处理

 public String getHeader(String name) {
        return response.getHeader(name);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虹科新品丨什么是光纤微动开关?(下)

HK-Micronor光纤微动开关 HK-MR386光纤微动开关和HK-MR380系列控制器搭配使用,提供了一种全新的创新型信号解决方案,可以长距离部署在困难和危险环境中。该开关传感器采用光中断的方法,通过双工62.5/125μm光纤链路,进行可靠的信号…

虹科方案|使用直接连接的阵列创建 SAN

一、引言通过将直连环境转换为共享存储,用户可以体验到物理主机之间或主机与存储之间更快的数据传输,从而使vMotion 实时迁移等 VMware 功能能 够在更短的时间内完成。二、关于VMWARE VSPHEREvSphere 平台是您的应用程序、云和业务 的最佳基础。 vSphere…

C语言_字符串旋转结果_C语言字符串旋转结果

上一篇博文讲了字符串左旋http://t.csdn.cn/8zbRf 这篇文章将讲解判断一个字符串是不是逆序过。 目录 一、问题描述 二、设计与分析 三、代码实现 一、问题描述 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 AAB…

【零基础】学python数据结构与算法笔记9

文章目录前言53.栈和队列的应用:迷宫问题54.使用栈解决迷宫问题55.使用队列进行迷宫问题:介绍56.使用队列进行迷宫问题:实现:总结前言 学习python数据结构与算法,学习常用的算法, b站学习链接 53.栈和队列…

【学习笔记之Linux】工具之vim配置

配置文件的位置: 在目录/etc/下面有一个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效;   每个用户可以在自己的主目录下创建一个私有的配置文件,命名为“.vimrc”,这个配置只对自己有效…

如何利用MOS管实现双向电平转换

前面讲过的三极管和MOS管电平转换电路都是单向的,就是信号只能是从A输出到B输入。其实单个MOS管也能实现双向电平转换,即信号即能从A输出到B输入,也能从B输出到A输入。实际电路就是这个,包含一个MOS管和两个电阻,芯片1…

自定义启动器

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉SpringBoot专栏 🔥欢迎大佬指正,一起学习!一起加油! …

D. Meta-set(组合数学)

Problem - D - Codeforces 你喜欢纸牌棋盘游戏“集合”。每张牌包含k个特征,每个特征都等于集合{0,1,2}中的一个值。这副牌包含所有可能的纸牌变体,也就是说,总共有3k张不同的纸牌。 如果三张牌的某个特征与这三张牌相同或两两不同&#xff0…

[LeetCode算法->双指针]

在算法中,双指针的问题较为常见,应用也比较广泛,双指针问题能够降低时间复杂度和空间复杂度,有必要掌握这一内容。下面通过LeetCode的题目来说明双指针。1.给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的…

Minecraft 1.19.2 Fabric模组开发 03.动画生物实体

我们本次尝试在1.19.2 Fabric中添加一个能够具有各种动画效果动作的生物实体。 效果展示效果展示效果展示 1.首先,为了实现这些动画效果,我们需要首先使用到一个模组:geckolib(下载地址) 找到项目的build.gradle文件,在repositories和depen…

vue实现网页端企业微信扫码登录功能(前端部分)

时至今日,企业微信在企业日常工作中的使用越来越频繁也越来越重要,不少企业已使用企业微信进行着日常的工作安排管理。在这种背景下,各类系统和企业微信对接的需求也不断增加,今天要说的就是一个比较常见的需求:在网页…

第08讲:Docker中的网络类型bridge和host

Docker 中的网络模式早先是 3 种,后来又加了 1 种,一共是 4 种。这里,我们只涉及、介绍使用其中 2 种网络模式:bridge 模式和 host 模式。 bridge 是驱动( Driver )类型为 bridge 的默认网络;h…

『 MySQL篇 』:库操作、数据类型

目录 目录 一、初识数据库 数据库 数据库管理系统 SQL语言 二、详解MySQL MySQL 存储引擎 三、简单的库操作 设置数据库的编码字符集 创建数据库 显示数据库 使用数据库 删除数据库 四、MySQL数据类型 数值类型 字符串类型 日期类型 一、初识数据库 学习 MyS…

SpringBoot整合ELK教程

SpringBoot整合ELK教程 1 基础概念 ELK 即 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统,本文主要讲解使用 ELK 来收集测试框架产生的日志。 Elasticsearch:用于存储收集到的日志信息;Logstash:用于…

如何成为优秀合格的管理者之角色定位

目录 导语 一、管理者的角色误区和角色定位 (一)管理者对上级 (二)管理者对下属 *如何要做好“老师”的角色? (三)管理者跨部门协作 (四)管理者对自己 二…

springboot:接手老项目,领导让更新数据库说明文档,如何3分钟完成任务

0 引言 最新在重新整理老项目的文档,其中数据库说明文档上一版更新还是在1年多前,文档中的数据结构说明与当前数据库严重脱节,所以更新数据库说明文档已经是迫在眉睫的事情了。 因为项目是一个比较大型且“年长‘的项目,涉及了多…

谷粒商城-基础篇-Day09-整合Ware服务

整合Ware服务 将服务注册到nacos中 spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-wareMapperScan("com.atguigu.gulimall.ware.dao")//mybatis包扫描 SpringBootApplication EnableDiscoveryClient//开启服务发现 EnableT…

进入内存,透彻理解数据类型存在的意义,整形在内存中存储,大小端字节序,浮点型在内存中存储

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习C进阶、数据结构、算法、JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛!📜所属专栏:C语言✈往期博文回顾:【Java基础篇…

Java——》AtomicInteger源码分析

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Java——》AtomicInteger源码分析一、测试用例二、…

Java基础学习笔记(一)面向对象

序言:主要记录一下java的学习笔记,用作面试复习,参考的学习资料是尚硅谷Java网课链接 面向对象是P39~P69内容 文章目录一、类和对象二、传值方式三、静态与静态代码块四、包五、构造方法六、继承与构造方法七、多态八、方法的重载与重写8.1 …