zoukankan      html  css  js  c++  java
  • Tomcat8及之后版本出现的The valid characters are defined in RFC 7230 and RFC 3986

    升级tomcat8及更高版本带来的问题

    由于使用get请求,链接中参数携带特殊字符,由于Tomcat的新版本中增加了一个新特性,就是严格按照 RFC 3986规范进行访问

    解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符

    (RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])

    1.统一的解决办法使用encodeURIComponent(对请求参数编码)

    使用encodeURIComponent会对参数所以参数都编码,这里不建议使用encodeURI,因为它不会对“; / ? : @ & = + $ , #”几个

    特殊字符编码。

    比如请求参数是:"{"criteria":{"matchMode":"AND","subCriteriaList":[{"fieldName":"oilNo","targetValue":"1","compareMode":"EQ"}]}}"

    代码如下:

    encodeURIComponent(JSON.stringify((new Query().buildQueryCrit('oilNo', formData.oilNo, 'EQ').queryCrit)));

    编码后:

    "%7B%22criteria%22%3A%7B%22matchMode%22%3A%22AND%22%2C%22subCriteriaList%22%3A%5B%7B%22fieldName%22%3A%22oilNo%22%2C%22targetValue%22%3A%221%22%2C%22compareMode%22%3A%22EQ%22%7D%5D%7D%7D"

    在springMVC的Controlelr层能正确接收字符串。


    备注另一个问题的解决方法:Linux tomcat8,JDK8 启动卡住半天 后才能正常启动解决方案

    将$JAVA_HOME/jre/lib/security/java.security内,将securerandom.source的内容改为file:/dev/./urandom即可

    linux或者部分unix系统提供随机数设备是/dev/random 和/dev/urandom ,两个有区别,urandom安全性没有random高,但random需要时间间隔生成随机数。

    可能在生成随机数的时候卡住了,导致tomcat启动不了







  • 相关阅读:
    Spring@Profile注解
    day 32 子进程的开启 及其用法
    day 31 udp 协议SOCK_DGRAM
    day 30 客户端获取cmd 命令的步骤
    day 29 socket 理论
    day 29 socket 初级版
    有关 组合 继承
    day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
    新式类和经典类的区别
    day 28 hasattr getattr serattr delattr 和带__内置__ 类的内置方法
  • 原文地址:https://www.cnblogs.com/jpfss/p/10037250.html
Copyright © 2011-2022 走看看