今天因为工作需要碰到个问题,springboot的配置文件application.properties里边的参数需要进行加密,利用Jasypt进行加密。但是因为每次发测试版本都要挨个参数加密比较麻烦,所以写了一个可执行jar文件直接自动进行参数加密,从application.properties文件中读取参数,如果没有加密就进行自动加密并重新写回文件中。但是有一个问题,加密完成后写回到文件时长度填充的“=”号会被转义成“\=”,所以就变成了如下形式:
然后就在项目中应用就不对了(当然了最后证明不是因为转义字符的问题,其实是数据库的问题,但我还是想了一下怎么去除properties文件的转义符号)。为了能正常使用,看了下Properties类的代码,发现Properties类对一些字符做了转义处理,像 ‘\t’,’\n’,’\r’,’\f’等。如下所示:
解决方法:
自己写个简单的解析,将“=”的转义去掉。
因为Properties类是用HashTable存储的,回写的时候是不按顺序的,会导致配置文件顺序发生变化,所以自己写了一个OrderedProperties类,继承了Properties,以链表形式顺序存储,所以在OrderedProperties类里边在saveConvert方法里排除掉“=”的转义。如下所示:
对比上文就知道这里将“=”的转义符号给去掉了,这样用OrderedProperties回写的参数中“=”就不会再被转义成“\=”了。最后的结果如下:
可以看到没有转义的“\”了。
之所以把这件事记下来,一是因为记录下自己的排查过程和解决思路,另外是听人说起的,有同事正则表达式里面希望匹配绝对的’\.’,而经过Properties类转义之后变成了’.’,意义就变成了“任意字符”,由于运行并不报错,而且某系情况下结果还是正确的,防止这种潜在的bug。