关于CentOS7.x上部署java项目,请求参数包含"|"无法访问的问题???

qweqweqewq 发布于 2017/01/20 09:14
阅读 525
收藏 0
我们是一家做金融产品的公司,有一家用我们产品的客户,想把项目从win环境迁到linux环境。然后问题就来了。

客户用的linux是CentOS 7.2的版本,我们公司的系统是C/S架构的系统,后台是java,前台是.net。项目迁移到linux上之后,发现我们系统在登录的时候弹出404 bad request的错误,war包是从win上直接拿过来,不太可能是我们系统的问题。

我到客户现场后,让前段工程师把客户端的请求弹出来,弹出来的请求地址如下:
((http://*.*.*.*:8080/????//usercheck?cmd=log_on&set=001&user=admin&pass=7XEFXcqUydY=&system=zpp-PC|10.100.8.99|68:17:29:48:63:EA ) 请求地址的ip和项目名称我替换掉了)

我把请求地址直接丢到ie的地址栏,返回的是无法访问。之前我也在本地打了断点,远程调试过,当我点击网络设置的时候是能进到后台的,但是点击登录的时候就直接弹404 bad request,说明这个请求根本没传到web服务器。
我把请求地址后面system参数里的“|”去掉,因为参数列表包括了客户端的主机名ip地址和mac地址,我只保留其中一个,发现服务器是有返回信息的,界面的提示信息是“登录失效,请重新登录”,说明改过的请求地址是能传到后台的。

所以我让他们把请求地址改了,不要使用“|”,因为linux的“|”是管道符,我猜测会不会linux把这个请求地址的“|”做了特殊处理,但是他们改完后发现还是不行。

之后我就回公司搭建和客户一样的环境进行测试,诡异的问题就来了。我使用的是装在本地虚拟机的CentOS的everything版本,因为里面的工具比较全,因为我不太会linux,测试的时候遇到tomcat启动的时候监听在ipv6以及防火墙导致我的宿主机没法访问虚拟机的tomcat这些问题我都是baidu,按baidu上改的配置,我自己也不记得改了什么,后面改好后,发现我们的系统是可以正常登陆的。

后面我又测试了CentOS的DVD和minimal版本,发现一样的是登录的时候弹出404 bad request。本来是到此为止,准备让客户换成CentOS的 everything版本的。本着严谨的态度,我想看一下是不是配置问题导致的,所以我重新又在虚拟机上装了一个CentOS的everything版本,tomcat跑起来后,打开宿主机的客户端,登录,又弹出了400 bad request。

这时候我有点兴奋了,这说明不是CentOS版本问题,很可能是配置问题,只需要打开前后两次装的everything版本,对比下配置就能知道原因了。但是!我打开虚拟机第一次装的CentOS-Everything,启动tomcat,发现客户端登录的时候居然无法登陆了,弹出了“400bad request”。我根本不记得我之前改了哪些配置,防火墙也关了,系统连接测试也是正常,就是无法登陆,一直搞到现在。坑请各位linux的大神帮忙分析下原因,不然我这几天估计不用下班了。
加载中
1
Feng_Yu
Feng_Yu
你的猜测都是错的,|并不是传递给命令行,而是传递给app server,所以压根不是管道的问题
qweqweqewq
qweqweqewq
但是奇怪的就是,改掉“|”后就可以正常请求了,并且像“\”这样的也不能出现在请求参数中,由于从我们系统的功能上很难去改造,并且暂时只在这一个客户这里发现这种问题,所以领导想让我在操作系统上找问题,但是我对linux理解的又不深,所以就尴尬了。
0
风筝上的少年
风筝上的少年
婆婆妈妈说了一堆,想不到你居然连HTTP的基础都不懂,| 关管道啥事,简直莫名其妙。。。一个URL字符串而已!!
Feng_Yu
Feng_Yu
回复 @qweqweqewq : access.log
qweqweqewq
qweqweqewq
回复 @风筝上的少年 : 没有日志啊,大哥,请求都没到后台,tomcat根本没日志输出
风筝上的少年
风筝上的少年
回复 @qweqweqewq : 跟操作系统没任何关系。有错看日志,别乱猜
qweqweqewq
qweqweqewq
所以为什么这一个请求会传不过去,类似的像“\”这种符号出现在参数中也是一样,但是在windows环境和其他的linux环境是正常的
0
风筝上的少年
风筝上的少年

有问题你看tomcat的日志啊,你折腾centos这算啥事。。。


风筝上的少年
风筝上的少年
回复 @qweqweqewq : 400 也是web server返回给你的,不是浏览器直接给你的
qweqweqewq
qweqweqewq
哥,400,请求根本没到后台,tomcat怎么打印日志啊
0
z
zzzxxxaaadev
浏览器端把那个|用urlencode处理下估计就好了
qweqweqewq
qweqweqewq
对吧“|”去掉就好了
0
风筝上的少年
风筝上的少年

我举几个400的例子。

1.使用springmvc,请求需要注入一个person对象和一个name字段,恰好person对象里也有name属性,然后就冲突了,这下springmvc就会报400错误,然后抛给tomcat。

2. windows和linux下的tomcat配置文件不一样,对URL解析不一致造成。

0
大賢者
大賢者
基础都不懂,比如目录不能含有|  换行 等等。 http url也有一些不能使用的字符。导致失败 
qweqweqewq
qweqweqewq
哎,失望了。是不是国内的论坛都这个鸟样???能不能把我的问题看望再喷???非得喷两句才能显的有成就感????我说了这系统用了很多年了都没有出问题,并且windows,linux的其他版本也都可以,就CentOS这个版本不行,我就想问一下有没有可能是系统设置问题,懂不懂???????
0
mjchow
mjchow

看这个情况感觉是参数类型对应不上造成的?或者解析那个参数有问题?

0
随风而过1314
随风而过1314

楼主怎么解决404的呢。我java是 springMVC和mybties写的 ,Tomcat配置成功,项目无法访问,关键一个没有业务逻辑的空javaweb访问到index.jsp,奇怪

返回顶部
顶部