首页 文章 精选 留言 我的

精选列表

搜索[linux],共10000篇文章
优秀的个人博客,低调大师

linux】tomcat新版本特性引发的url问题

通过我们的测试,在tomcat7.0.73版本以上都会出现下列描述的问题。 1、测试报错: Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:192) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 2、通过抓包看出,当get请求为: http://localhost:8080/sma-scm/interface.do?req={"hard":"FD89C82352A9B0940BC5C86D9F1E36DF4F8E70382D265975","channel":"ADDB1A3E0F6EDA9AE89B542B977107C0A25B1EE205A42BE1"} 会出现这种报错,因为升级tomcat后有一些字符(例如“{,}“),当他们直接放在Url中的时候,可能会引起解析程序的歧义 Tomcat8.5,当Get请求中包含了未经编码的非法字符时,会报以下错误,请求未到应用程序在Tomcat层就被拦截了。 经过测试,paphone控件和老版本的APP SDK请求时都会报此错 Tomcat报错: java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 会返回400错误。 3、经查询,Tomcat7.0.73就已经添加了RFC 3986这个规范。 RFC 3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(! * ’ ( ) ; : @ & = + $ , / ? # [ ])。 还有一些字符当直接放在Url中的时候,可能会引起解析程序的歧义,这些字符被视为不安全字符。 ?空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉。 ?引号以及<>:引号和尖括号通常用于在普通文本中起到分隔Url的作用 ?#:通常用于表示书签或者锚点 ?%:百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码 ?{}|\^[]`~:某一些网关或者传输代理会篡改这些字符 4、对于此问题,有以下几种解决方案。 1)切换版本到低版本。(不可用) 2)修改Tomcat源码。(不可用) 3)前端请求对URL编码。 4)修改Get方法为Post方法。 5)因{ }是不安全字符,默认被 tomcat拦截。如果需要在URL中传输json数据,在catalina.properties中添加支持。 5、以下是尝试结果: 1)尝试上报服务请求修改catalina.properties文件配置 添加tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} 测试结果: IE浏览器还是有相同报错,如果请求里面只含有 { 、}不再报错,但是“仍然无法被识别,因此json无法被识别 改为tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}” 会显示 “是不允许的字符“ Google浏览器不会报错 2)使用HttpGet模拟发送get形式的json请求 测试结果:并没有到tomcat层面,控制台直接报错: Illegal character in query at index 61:http://localhost:8080/sma-scm/interface.do?req={"hard":"FD89C82352A9B0940BC5C86D9F1E36DF4F8E70382D265975","channel":"ADDB1A3E0F6EDA9AE89B542B977107C0A25B1EE205A42BE1"} 使用这种方式只要包含{、}、”都不允许发送请求(根本没到tomcat层面) 3)使用HttpPost模拟发送post形式的json请求 测试结果:无报错 4)尝试在使用HttpGet模拟发送get形式的json请求的时候将请求转义,例如: buf.append("req="+URLEncoder.encode(json, "utf-8")); 测试结果:无报错 5)尝试在服务接收的doGet方法里面转义 测试结果:无效果,请求未到应用程序在Tomcat层就被拦截了。

优秀的个人博客,低调大师

linux相对路径和绝对路径

讲解思路: 什么是绝对路径 什么是相对路径 相对路径和绝对路径存在的合理性 什么是绝对路径 系统中的所有文件路径,构成一棵树。你在查找一个文件的过程,其实就是在遍历一棵树,你想要的那个文件就是树上的一个节点,从树根到当前节点的遍历就是一条路径。如果你无论查找什么文件都从树根开始,那么最终找到目标文件所遍历的路径就是绝对路径。比如在根路径/下有一个目录lives,这个目录的结构如下: lives ├── animal │ ├── cat │ └── dog ├── human │ ├── man │ │ ├── programmer │ │ ├── scientist │ │ └── teacher │ └── woman └── planet ├── earth └── mars 如果你现在在programmer目录下: [root@localhost programmer]# pwd /lives/human/man/programmer 你想从当前programmer目录跳转到scientist目录下,你怎么做? 如果采用绝对路径: [root@localhost programmer]# cd /lives/human/man/scientist/ [root@localhost scientist]# 如果采用相对路径: [root@localhost programmer]# cd ../scientist/ [root@localhost scientist]# 一句话: 相对路径是相对于程序当前所在的目录,当前目录随着程序的执行不断地发生变化。但是,绝对路径是相对于根路径/的,根路径是恒定不变的。作为一个工科生,对标准性和灵活性的关系应该比较清楚。 绝对路径虽然有失灵活,但是比较安全,你不必在意当前所处的目录,定位任何文件或者目录都从根路径开始。 相对路径虽然灵活,但是不大安全,很可能遗漏了或者混淆了当前所处目录,造成出错。 因此,平时个人随意地操作,可以使用相对路径,但是软件安装目录必须保证正确,绝对路径是唯一的明智选择。

优秀的个人博客,低调大师

linux系统中用yum命令实现对软件的管理

yum这个命令就相当于我们操作手机中的应用商店,在其中我们可以实现搜索软件,安装软件,卸载软件等等对软件的管 理,然而我们下载软件,实际上是在yum源中下载 (一).首先我们了解一下yum的命令及其作用 1.yum install softwarename 安装指定软件 yum install -f softwarename 直接安装不提示 2.yum repolist 列出设定yum源信息 3.yum remove softwarename 卸载指定软件 yum remove -f softwarename 强制卸载不提示 4.yum list softwarename 查看软件源中是否含有此软件 5.yum list all 列出所有软件的名称 yum list all |wc -l 列出所有软件的名称并显示数量 6.yum list installd 列出所有已经安装的软件名称 7.yum list available 列出所有可以用yum安装的软件名称 8.yum clean all 清空yum缓存 9.yum search softwarename 根据软件信息搜索软件名字(可以是名字的一部分或者是软件的特征) 10.yum whatprovides filename 在yum源中查找包含filename文件的软件包 11.yum update 更新软件 12.yum history 查看系统软件改变的历史(安装,重新安装,更新,卸载等重大改变) 13.yum reinstall softwarename 重新安装指定软件 14.yum info softwarename 查看软件信息 15.yum groups list 查看软件组信息 16.yum groups info softwaregroup 查看软件组内包含的软件 17.yum groups install softwaregroup 安装组件 18.yum groups remove softwaregroup 卸载组件 (二)本机yum源的配置:在自己的主机中配置一个yum源,在主机中可以使用 1.得到一个和自己系统相匹配的镜像文件 2.在根下建立一个专门存放镜像的目录 mkdir /iso mv /home.kiosk/Desktop/*.iso /iso(将你自己的镜像放进去) 3.在/iso下建立存放两个镜像的挂载点(镜像相当于U盘,必须插在电脑上才能获取其中的东西,镜像文件必须挂载在目录 下才能读取使用里边的文件) mkdir /source7.0 mkdir /source7.2 4. mount /iso/rhel-server-7.0-x86_64-dvd.iso /source7.0 mount /iso/rhel-server-7.2-x86_64-dvd.iso /source7.2 5.进入yum的原本仓库中,将里边的东西移动到新的目录下 cd /etc/yum.repos.d mkdir /repobackpag mv * /repobackpag 6.编写自己的文件让系统知道你的包在哪里 vim yum.repo (yum.repo仅仅是一个名称,可以任意取名,但结尾必须是.repo格式) 在里边写: [source7.2] 镜像挂载的目录 name=source7.2 baseurl=file:///source7.2 file://表示在本机中传输 http://表示在不同主机,通过网络传输 gpgcheck=0 7.yum clean all 8.下载你想要下载的软件 (三)共享yum源的配置:通过http将自己配置的yum共享出去,使得别人也可以使用 1.在本地yum源配置完成后安装apach(httpd) yum install httpd 2.systemctl start httpd 打开http服务 systemctl enable httpd 设置http服务为开机自启动 systemctl stop firewalld 关闭防火墙 systemctl disable firewalld 设置防火墙为开机不自启动 mkdir /var/www.html/rhel7.0 在www/html目录中建立挂载镜像7.0的目录 mkdir /var/www.html/rhel7.0 在www/html牡蛎中建立挂载镜像7.2的目录 3.挂载镜像 mount /iso/rhel-server-7.0-x86-64-dvd.iso /var/www/html/rhel7.0 跟配置主机yum源一样,需要将镜像挂载 mount /iso/rhel-server-7.2-x86-64-dvd.iso /var/www/html/rhel7.0而共享yum必须将镜像挂载在www/html下 vim /etc/rc.d/rc/local mount /iso/rhel-server-7.0-x86-64-dvd.iso /rhel7.0 mount /iso/rhel-server-7.2-x86-64-dvd.iso /rhel7.0 设置开机时自启动挂载 chmod +x /etc/rc.d/rc.local 给它一个可执行的权限 4.访问测试 在浏览器中输入真机地址 httpd://172.25.254.10/rhel7.0 7.0版本 httpd://172.25.254.10/rhel7.0 7.2版本 表示共享yum源配置成功 5.配置虚拟机 rm -fr /etc/yum.repos.d/* vim /etc/yum.repos.d/yum.repo [rhel7.0] 挂载镜像的目录名称 name=rhel7.0 baseurl=http://172.25.254.10/rhel7.0 http://表示通过http共享yum源 gpgcheck=0 这样我们就可以在虚拟机中利用yum源下载需要的软件,例如我们之前需要在虚拟机中下载dhcp服务

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册