项目开发初期使用 MySQL ,后期需要适配 Oracle ,总结适配过程及多数据库支持时,从开发初期就需要考虑的几点。
另外,总结几点最近半年开发过程中的技术问题。坑都填了,也该是时候记录一下填坑的经过了,要不然下次可能还会踏入同一个坑。
USER
不能乱用做别名.跟 MySQL 不一样,Oracle 有一张特殊的用户表名称就是 USER
。ESCAPE
语法是是一样的,可以统一。此外字符串连接函数 CONCAT
也应该以 Oracle 为主,只能有两个参数。jdbc-type-for-null: 'null'
统一解决。NCLOB
VS VARCHAR(4000)
,有些特殊字段需要超长字符的,有个四千的边界,超过就需要用 NCLOB
类型。有些低级错误,比如:
while(it.hasNext)
而非 if ,后者只会执行一次。再次印证了一句经验:不要相信拷贝来的代码,除非经过了你的测试。long result = 0; switch (type){ case "year": result = time*365*24*60*60*1000; break; case "month": result = time*30*24*60*60*1000; break; case "day": result = time*24*60*60*1000; break; }
这个简单的根据时间单位类型,计算间隔的时间戳的代码, time
类型传入了 int
,结果几个纯数值默认 int 相乘后,单位为 year
结果溢出为负数了。
这是一个计算密码锁定时间的功能,锁定时间算出为负了,当密码正确时自动判断是否继续锁定时,当前时间 > (锁定开始时间+锁定时常)直接解锁了。
这个错误虽然低级,但是却测不出来,只有脑回路清奇的测试把密码锁定策略的锁定周期设置为年时才会显现。
Web 项目安全扫描,https 支持的过程中,默认的 ssl 配置被扫到了不安全的密码套件和密钥长度过短的问题。Spring Boot 项目配置 SSL ,在目标服务器配置后 ciphers
密码套件后,访问不成功,总结一下这个过程。
相关的 SSL 配置:
ssl: enabled: false key-store: file:xxx.jks key-store-type: JKS key-alias: xxx key-store-password: xxx # 配置证书版本,默认是 TLS1.0 protocol: TLS # 设置SSL版本,默认是 TLS1.0 enabled-protocols: TLSv1.2 # 密钥套件算法,剔除不安全的算法 ciphers: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
需要注意的是,ciphers 参数中的密码算法对 JDK 版本有要求,较低的1.8 小版本是不支持的。
有一台服务器的 SFTP 服务配置连接时间很短,由于网络问题,FTP 客户端总是没法在30秒内完成连接。但是碰到需要上传文件的时候,怎么办呢?
找别人上传了两次之后,总不能每次都找别人帮忙上传吧。试了下 Java 的 FTP 上传工具类,jsch 竟然能成功上传。一个简单的工具类,就成了缩减版的 FTP 工具了。
启示一,协同开发过程中,如果你看到了确实是问题的异常,抛在开发沟通群里,不能指望真正负责这个模块的人会主动解决这个问题。最好的方法是 @他 并明确告诉他有问题。否则,下次这个问题复现的时候,还是会再次面对的。
启示二,再次反思,拷贝代码要测试。
以上就是项目适 Oracle改造及SSL安全性配置问题汇总详解的详细内容,更多关于Oracle改造SSL安全适配的资料请关注其它相关文章!