当前位置: 首页 > news >正文

记录一次服务器迁移时,数据库版本不一致导致sql函数报错和系统redirect重定向丢失域名问题

背景介绍:系统是个JSP+hibernate老项目,因为服务器到期,需要迁移服务器,所以需要把代码和数据库迁移,更换服务器不是复制粘贴就行了,需要考虑到各种配置,版本兼容等等,本次就遇到了问题。

问题一:数据库版本不一致

我们这个老项目本身确实存在很多问题,而且也不是金融项目,对代码质量要求不高,其中慢sql更是一大堆。然后迁移项目搞好配置文件时报错:

select list is not in group by clause and contains nonaggregated column 'databaseA.s.startmonth'

报错原因:这个错误是 MySQL 5.7及以上版本启用了 ONLY_FULL_GROUP_BY 模式导致的

排查步骤:

1、根据日志和操作确定大致范围,然后本地debug查看方法,尽可能找到并截取报错sql

2、把sql在新数据库执行,如果保证错则显示新数据库与代码中的sql不兼容

解决办法:

1、改代码(少的话可以,如果系统中sql多的项目不现实,除非迁移不着急)

2、修改数据库配置,关闭ONLY_FULL_GROUP_BY(具体方式可以问豆包,百度)

问题二:系统redirect重定向时,浏览器URL丢失域名或IP

伪代码:

    @RequestMapping("/userIndex.html")public String userIndex(User user, HttpServletRequest request) throws Exception{String loginUrl = userService.getUserIndexUrl(user,request);if (!loginUrl.equals("erro")) {return "redirect:"+loginUrl;} else {return "/error";}}

正常时浏览器应该跳转的URL是:https://code.chinese.cn/program/userIndex.html

结果代码走到这时浏览器URL一直是:https://program/userIndex.html

各种百度,问豆包,问Deepseek,原因都不一样,在此列出当时尝试过的方法:

1、检查代码,核实代码排除代码拼接错误,debug查看最后返回路径。

2、服务器Host,服务器(JSP 部署机器)或客户端(浏览器所在机器)的hosts文件被配置了异常映射,导致"code.chinese.cn"被解析为"program",或直接映射到无 IP 的"program"别名。

例如:

# Linux:/etc/hosts | Windows:C:\Windows\System32\drivers\etc\hosts
127.0.0.1  program
# 或
code.chinese.cn  program

2、Tomcat配置文件错误,如果是Tomcat启动项目,查看conf下的service.xml文件中的<Host>标签

例如:Tomcat 的<Host>节点name属性被配置为volunteer,导致部署在该 Host 下的 JSP 项目,request.getServerName()默认返回volunteer,而非真实域名。

<!-- Tomcat server.xml -->
<Host name="program" appBase="webapps" unpackWARs="true" autoDeploy="true"><!-- 错误:将Host的name配置为volunteer,而非pmplatform.chinese.cn --><Context path="/program" docBase="program" reloadable="true"/>
</Host>

3、排查项目代码中的自定义Interceptor拦截器,看是否在“postHandle”方法中写死,例如根据服务器IP判断返回URL

        String clientIp = request.getHeader("X-Real-IP");if (!"1.2.3.4".equals(clientIp)) {return "program/userIndex.html";}

4、检查Servlet项目中的"web.xml",这种情况基本不存在

<!-- web.xml 配置全局参数 -->
<context-param><param-name>redirect.domain</param-name><param-value>volunteer</param-value>
</context-param>
<context-param><param-name>redirect.scheme</param-name><param-value>https</param-value>
</context-param>
<context-param><param-name>redirect.page.userIndex</param-name><param-value>/userIndex.html</param-value>
</context-param>

5、检查Nginx配置文件(因为这个文件平时很少用到,所以最后才想起这个,但是最后也确实在这里解决了问题)

# 错误的Nginx配置
server {listen 443 ssl;server_name code.chinese.cn; # 对外暴露的真实域名location /program/ {proxy_pass http://127.0.0.1:8080/program/; # 转发到后端Tomcat
        # 致命错误:将传给Tomcat的Host头改为programproxy_set_header Host program; # 正确配置应为:proxy_set_header Host $host;(保留真实域名)}
}

客户端请求时,Host头是"code.chinese.cn";
代理将Host头篡改为"program"后传给 Tomcat;
Tomcat 处理"redirect:userIndex.html"时,基于Host=program生成重定向地址,返回给客户端的跳转指令是https://program/userIndex.html;
客户端(浏览器)接收到指令后,直接访问该错误 URL。

 

http://www.gsyq.cn/news/97344.html

相关文章:

  • 打造丝滑体验:WebGL流体模拟引擎的终极优化指南
  • 2025年比较好的肤感封边条/深压纹封边条TOP实力厂家推荐榜 - 品牌宣传支持者
  • 2025年知名的不粘锅/汤锅不粘锅厂家选购指南与推荐 - 品牌宣传支持者
  • 潜在一致性模型(LCM):用“一致性蒸馏”让扩散模型实现“秒级生成” - 实践
  • 记录一次Figma订阅被多扣费的踩坑教训
  • 2025中国中小制造企业生产管理系统(MES)选型权威排行榜:快速锁定高适配、高性价比方案
  • DolphinScheduler技术生态全景解析:50+扩展模块构建企业级调度平台
  • 学术破局新范式:书匠策AI如何重构毕业论文写作全流程?
  • Rust高性能同步原语Parking Lot终极指南:快速构建并发应用
  • 向量数据库混合搜索技术深度解析:从架构设计到性能优化实战
  • 2025年质量好的一体式同步升降器厂家最新权威推荐排行榜 - 行业平台推荐
  • 2025年口碑好的地暖挤塑板/冷库挤塑板厂家实力及用户口碑排行榜 - 品牌宣传支持者
  • Emupedia终极指南:如何快速安装和体验复古游戏系统
  • Parsec VDD虚拟显示器创建工具:Windows高分辨率虚拟屏幕完整指南
  • 法律智能检索:LawBERT嵌入模型在司法文本分析中的实战指南
  • HarmonyOS 5.0 AT指令4G透传控制器
  • 告别卡顿:DBeaver性能优化终极指南
  • 浏览器界面语言个性化设置完全指南:从零基础到精通
  • 6、GCC代码优化全解析
  • 深入解析:eventfd 初认识Reactor/多线程服务器的关键唤醒机制
  • AI老照片修复训练数据构建:从零到一的效率革命
  • 2025-12-14 GitHub 热点项目精选
  • PCSX2模拟器性能优化终极指南:从卡顿到流畅的完整解决方案
  • GLM-4.6技术突破:200K上下文+工具调用引领智能体新纪元
  • 2025年热门的铁氟龙喷涂行业内口碑厂家排行榜 - 品牌宣传支持者
  • 2025年车衣改色哪家强?五大口碑门店深度测评,汽车贴膜/太阳膜/汽车车衣/贴隐形车衣/隐形车衣/车衣改色定制哪个好 - 品牌推荐师
  • VGGT实战手册:零基础打造高精度SLAM系统
  • 60、Unix 开发与格式化工具全解析
  • 2025年热门的称重模块行业内知名厂家排行榜 - 品牌宣传支持者
  • 第三章-路由事件