游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

SpringBoot配置文件加密

  本章将对SpringBoot配置文件中的数据加密做自定义开发。在SpringBoot开发过程中配置文件是明文存放在application。yml或者application。properties文件中,这种配置方式会带来一定的安全隐患,本章将对这个问题提出一个简单的解决方案。编码
  首先需要确定一个加密解密方式,本文采用RSA进行加密解密,首先编写加密解密的代码,注意RSA加密解密需要使用到公钥和私钥,公钥私钥的生成代码如下:publicstaticvoidgenerateKey()throwsNoSuchAlgorithmException{KeyPairGeneratorkeyPairGenKeyPairGenerator。getInstance(EncryptionType。RSA);keyPairGen。initialize(1024,newSecureRandom());KeyPairkeyPairkeyPairGen。generateKeyPair();RSAPrivateKeyprivateKey(RSAPrivateKey)keyPair。getPrivate();得到私钥RSAPublicKeypublicKey(RSAPublicKey)keyPair。getPublic();得到公钥StringpublicKeyStringnewString(Base64。encodeBase64(publicKey。getEncoded()));StringprivateKeyStringnewString(Base64。encodeBase64((privateKey。getEncoded())));System。out。println(当前生成的公钥publicKeyString);System。out。println(当前生成的私钥privateKeyString);}
  加密代码如下:publicstaticStringencrypt(Stringstr,StringpublicKey)throwsNoSuchAlgorithmException,BadPaddingException,IllegalBlockSizeException,NoSuchPaddingException,InvalidKeyException,InvalidKeySpecException{byte〔〕decodedBase64。decodeBase64(publicKey);RSAPublicKeypubKey(RSAPublicKey)KeyFactory。getInstance(EncryptionType。RSA)。generatePublic(newX509EncodedKeySpec(decoded));CiphercipherCipher。getInstance(EncryptionType。RSA);cipher。init(Cipher。ENCRYPTMODE,pubKey);returnBase64。encodeBase64String(cipher。doFinal(str。getBytes(StandardCharsets。UTF8)));}
  解密代码如下:publicstaticStringdecrypt(Stringstr,StringprivateKey)throwsNoSuchAlgorithmException,InvalidKeySpecException,NoSuchPaddingException,BadPaddingException,IllegalBlockSizeException,InvalidKeyException{byte〔〕inputByteBase64。decodeBase64(str。getBytes(StandardCharsets。UTF8));byte〔〕decodedBase64。decodeBase64(privateKey);RSAPrivateKeypriKey(RSAPrivateKey)KeyFactory。getInstance(EncryptionType。RSA)。generatePrivate(newPKCS8EncodedKeySpec(decoded));CiphercipherCipher。getInstance(EncryptionType。RSA);cipher。init(Cipher。DECRYPTMODE,priKey);returnnewString(cipher。doFinal(inputByte));}
  上述代码为基本的加密解密工具,加下来需要在配置文件中确定哪些配置是需要进行解密的,本例将采用自定义前缀后缀的方式进行匹配,前缀为PWD〔,后缀为〕,如果在配置文件中属性值是以前缀后缀包裹的那么这个数据会被进行解密操作,
  通过前文的加密工具可以先进行一次密码加密加密原文为1234qwer,公钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBOkkkvjbOQ6UTCo8U4bRCEcEtxz8haHg6lueM3NBbH3eIT7kfwQFOqj1h1qPGcQNeyn4vxzMWBAKzSQehjqVBL78GN7EZ7TEaUuWO8qsuZnOdrztX7bNKACnksSelmtbrbnFKUMAq2c2mS0o1V6iwyRxJYLGaHGXnz4KSkwIDAQAB
  私钥:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIE6SSSNs5DpRMKjxThtEL8RwS3HPyFoeDqW54zc0Fsfd4hPuRBAU6qPWHWo8ZxA17KfiHMxYEArNJB6GOpUEvvwY3sRntMRpS5Y77yqy5mc52vO1fts0oAKeSz5J6Wa1utucUpQwCrZzaZLSjVXqLDJHElgsZocZefPgpKTAgMBAAECgYAFaCDjTqoQWzgu4cQ2xXK7Ur7N7bNixVyOgnu0MxDsnxZrN5qxP2wElI7Y5xgXF2diseoxqY3zn9tVEPsmwUcY73naoosx9V8oExgTBUkZYIzj1ei08zOr984zl3dbFcxOCRvqywXj9FAAGx1mhmCzFCIauJg3aX0S9mt5CwQJBAMYZsmMQ9owoXZuSclKVRfMHFpAPhQlcBM4xadhX0IRYATgNTxpESmcCoGWvyw3bvieNJyC9Njx6X4FJ2EZUzhECQQCm2IM5MlsCwyKtME5RPFna2hSqYU80UzkNfDIyMokcU2JUI4Fhigog4ol0GFMiMBsHIjScJiAwNbIsq5rsJjAkA94yVBobkETFACHBwvBIdXxy0bUF3lcKPnrrQ8bCKuVbf7xNyjfhYoXDzxNmQuMeNH6HLrpDVD3qLCGuxyuhAkAiLPl8gJWnhw9qbkdXuB0rVS1WZy9JgkblpHc5gjt9zTo0CDGaDhAftnSuMYiAefwZTSmoj85k3ExdtZJAkEArJuGNWY9HP4p7jtZX9rMokyB3517v7HQdJKBDIlOzseRCroCvU8LQURDFBUqXCRgedxgW0ZmKFf4xeawqw
  加密结果为:PWD〔bMw8oqCma31JqF0DCuf5QWqSFRMigYw3fMBIIIfJ85vnmNnFbH9IcJfUHgbSmNHeITffToODwAygy4vKdzu6o1i1UQOd8w4nPKhnVJCLKqW5jmc3YwFkTIRBp63NJWzECVnRHqEKbTxPMa1gfKql2U45XxqeDSZOEXGeAE〕
  得到这个数据后将其配置在application。properties文件中,具体内容如下server。port8080spring。application。nametestappspring。datasource。passwordPWD〔bMw8oqCma31JqF0DCuf5QWqSFRMigYw3fMBIIIfJ85vnmNnFbH9IcJfUHgbSmNHeITffToODwAygy4vKdzu6o1i1UQOd8w4nPKhnVJCLKqW5jmc3YwFkTIRBp63NJWzECVnRHqEKbTxPMa1gfKql2U45XxqeDSZOEXGeAE〕
  接下来需要进一步解决的是如何将这个加密字符串进行解密,这里需要使用BeanFactoryPostProcessor接口对环境变量进行修改,具体实现代码如下:OverridepublicvoidpostProcessBeanFactory(ConfigurableListableBeanFactorybeanFactory)throwsBeansException{MutablePropertySourcespropertySourcesenvironment。getPropertySources();for(PropertySourcelt;?propertySource:propertySources){if(propertySourceinstanceofOriginTrackedMapPropertySource){OriginTrackedMapPropertySourceom(OriginTrackedMapPropertySource)propertySource;MapString,Objectsourceom。getSource();source。forEach((k,v){Stringpropertyenvironment。getProperty(k);if(hasPreAndSuf(property)){LOG。info(开始处理k〔{}〕,k);try{StringrelaysplitPreAndSuf(property,this。prefix,this。suffix);StringdecryptRSAEncrypt。decrypt(relay,getPrivateKey(environment));source。put(k,decrypt);}catch(Exceptione){LOG。error(e,e);}}});}}}
  处理逻辑如下:提取环境配置中的所有配置属性判断配置属性是否是OriginTrackedMapPropertySource类型,该类型的数据是在application。yaml中的内容处理OriginTrackedMapPropertySource对象的value值,如果value包含自定义前缀后缀则进行解密
  在本例中对于公钥私钥以及前缀后缀是允许自定义的,开发者只需要在配置文件中根据下面表格进行填写即可
  属性名称
  属性含义
  默认值
  encryption。prefix
  前缀
  PWD〔
  encryption。suffix
  后缀
  〕
  encryption。rsa。publicKey
  公钥
  encryption。rsa。privateKey
  私钥
  注意:为了便捷操作开放了配置文件形式的公钥秘钥的配置,这部分配置可以在测试环境中开发环境中进行使用。如果需要在生产环境中使用请使用下面两种方式:
  方式一:在项目资源目录resources文件夹下创建hfprivatekey文件,向文件中填写如下内容encryption。rsa。privateKeyMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIE6SSSNs5DpRMKjxThtEL8RwS3HPyFoeDqW54zc0Fsfd4hPuRBAU6qPWHWo8ZxA17KfiHMxYEArNJB6GOpUEvvwY3sRntMRpS5Y77yqy5mc52vO1fts0oAKeSz5J6Wa1utucUpQwCrZzaZLSjVXqLDJHElgsZocZefPgpKTAgMBAAECgYAFaCDjTqoQWzgu4cQ2xXK7Ur7N7bNixVyOgnu0MxDsnxZrN5qxP2wElI7Y5xgXF2diseoxqY3zn9tVEPsmwUcY73naoosx9V8oExgTBUkZYIzj1ei08zOr984zl3dbFcxOCRvqywXj9FAAGx1mhmCzFCIauJg3aX0S9mt5CwQJBAMYZsmMQ9owoXZuSclKVRfMHFpAPhQlcBM4xadhX0IRYATgNTxpESmcCoGWvyw3bvieNJyC9Njx6X4FJ2EZUzhECQQCm2IM5MlsCwyKtME5RPFna2hSqYU80UzkNfDIyMokcU2JUI4Fhigog4ol0GFMiMBsHIjScJiAwNbIsq5rsJjAkA94yVBobkETFACHBwvBIdXxy0bUF3lcKPnrrQ8bCKuVbf7xNyjfhYoXDzxNmQuMeNH6HLrpDVD3qLCGuxyuhAkAiLPl8gJWnhw9qbkdXuB0rVS1WZy9JgkblpHc5gjt9zTo0CDGaDhAftnSuMYiAefwZTSmoj85k3ExdtZJAkEArJuGNWY9HP4p7jtZX9rMokyB3517v7HQdJKBDIlOzseRCroCvU8LQURDFBUqXCRgedxgW0ZmKFf4xeawqw
  需要将等于号后面的内容进行修改,替换为项目中的秘钥
  方式二:通过命令行进行传递
  在启动命令中添加Dencryption。rsa。privateKeyMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIE6SSSNs5DpRMKjxThtEL8RwS3HPyFoeDqW54zc0Fsfd4hPuRBAU6qPWHWo8ZxA17KfiHMxYEArNJB6GOpUEvvwY3sRntMRpS5Y77yqy5mc52vO1fts0oAKeSz5J6Wa1utucUpQwCrZzaZLSjVXqLDJHElgsZocZefPgpKTAgMBAAECgYAFaCDjTqoQWzgu4cQ2xXK7Ur7N7bNixVyOgnu0MxDsnxZrN5qxP2wElI7Y5xgXF2diseoxqY3zn9tVEPsmwUcY73naoosx9V8oExgTBUkZYIzj1ei08zOr984zl3dbFcxOCRvqywXj9FAAGx1mhmCzFCIauJg3aX0S9mt5CwQJBAMYZsmMQ9owoXZuSclKVRfMHFpAPhQlcBM4xadhX0IRYATgNTxpESmcCoGWvyw3bvieNJyC9Njx6X4FJ2EZUzhECQQCm2IM5MlsCwyKtME5RPFna2hSqYU80UzkNfDIyMokcU2JUI4Fhigog4ol0GFMiMBsHIjScJiAwNbIsq5rsJjAkA94yVBobkETFACHBwvBIdXxy0bUF3lcKPnrrQ8bCKuVbf7xNyjfhYoXDzxNmQuMeNH6HLrpDVD3qLCGuxyuhAkAiLPl8gJWnhw9qbkdXuB0rVS1WZy9JgkblpHc5gjt9zTo0CDGaDhAftnSuMYiAefwZTSmoj85k3ExdtZJAkEArJuGNWY9HP4p7jtZX9rMokyB3517v7HQdJKBDIlOzseRCroCvU8LQURDFBUqXCRgedxgW0ZmKFf4xeawqw
  需要将等号后面的内容进行修改,替换为项目中的秘钥
  从笔者所经历的角度来看命令行传递参数可能更加安全一些,因为文件和命令行相比命令行需要在生产环境才可以看到,而文件在仓库中会存在。
  接下来做一个测试,在启动时输出spring。datasource。password属性查看是否是加密前的数据,测试代码如下:SpringBootApplicationpublicclassApp{Value({spring。datasource。password})privateStringdataSourceProperties;publicstaticvoidmain(String〔〕args){SpringApplication。run(App。class,args);}BeanpublicApplicationRunnerrunner(){returnargs{System。out。println(dataSourceProperties);};}}
  启动项目后可以看到控制台输出1234qwer

新的一年,越来越有福气一元复始,万象更新。新的一年又是一个新的开始。诉不尽的新年祝福,人生中最好的福气,都会化为自己前行路上的助力。人的福气,并不是天生就有的,而是靠自己慢慢修来的……穿毛衣时尽量不要塞进裤腰里了,今年明星都流行这样穿,时髦显瘦毛衣也许是许多人冬季衣橱的标配,而塞裤腰的穿法和毛衣总是相依相随,塞裤腰大概是毛衣显瘦的第一要义。但今年穿毛衣就尽量不要塞进裤腰里了,来学学今年明星的穿法吧,时髦且get显瘦效……塔图姆4144无缘今日最佳?因为他遇到了古典打法大师一场比赛的输赢在绝大部分情况下都取决于球队当家球星能否有出色的发挥。今天NBA照常进行了多场精彩的比赛,经过一番鏖战,就有诸多球星打出了绝佳的表现,兰德尔、布伦森、大帝、哈登、……北京十四五将改造老旧小区1。6亿平方米市住建委近日印发《北京市十四五时期建筑业发展规划》。规划提出,十四五时期,本市建筑业增加值增长率年均保持在5,累计推广超低能耗建筑500万平方米,2000年底前建成需改造的老旧……5G版华为现货充足,颜值出众鸿蒙系统加持,8128G仅339在手机市场中,要说最优秀的手机品牌还得是苹果、三星以及华为,想必了解手机资讯的网友都知道苹果仿生处理器还是比较强悍的,有了它的加持即使用了几年都不会卡,这也是苹果手机为什么那么……冬日畅游冰雪世界!相约日本东北冰雪节点灯时的迷你雪屋银装素裹的天守阁与苍松,也会被亮灯妆点,营造出一种梦幻的诗情。莲花池周围则排列了约300座点亮着蜡烛的迷你雪屋,由蜡烛装点而成的梦幻空间如同满天繁星一般美……(体育国际足球)法甲综合大巴黎主场大胜世界杯前五分领跑积分榜新华社巴黎11月13日(记者肖亚卓)20222023法甲联赛13日结束了卡塔尔世界杯前的最后一轮比赛,领头羊巴黎圣日耳曼在主场5:0大胜欧塞尔队,继续以5分的优势领跑积分榜。……后悔晚矣!两大豪门俱乐部欧冠出局,若C罗在场恐不会这么糟糕!后悔晚矣!两大豪门俱乐部欧冠出局,若C罗在场恐不会这么糟糕!一步错步步错,谁也无法保证当初的决定是否是正确的。若说当今足坛中的绝代双骄,无疑是C罗与梅西,两人的能力如何大……印度婆罗门到底有多牛永远的特权阶层!一出生就是贵族最近几年,印度的电影都因为高质量而风靡于全球各地,人们通过电影也能够窥探一些当地人的生活。但是从电影看到的都是人家想要给我们看到的,具体当地人是如何生活的,还需要我们自己亲眼去……酒店微信小程序开发哪些好处?早前人们出行大多数都是依靠手机上的APP订酒店,大家常用的旅行出游APP就有携程、去哪儿、途牛等等,但是下载在这样的APP非常的耗费流量,还会超占手机内存空间,所以使用起来还是……海南省迈湾天角潭两大水利枢纽工程建设加快推进图为迈湾水利枢纽工程,正在进行大坝工程建设。骆云飞摄中新网海口11月3日电(记者王子谦王晓斌)随着自贸港建设不断推进,海南加大水利基础设施建设。迈湾水利枢纽工程和天角潭水……买手机渠道很多,学会这几招,能省不少买手机,这些渠道可以让你省下不少钱。今天聊聊手机,这个时代产物现在太普遍了,每个人最少人手23台,那么你平时买手机都在哪里买呢?某东某宝还是某直播间,其实价格这个东西,在……
搭载华为自研芯片现货5G鸿蒙手机盘点华为自研麒麟芯片与鸿蒙系统结合在一起带来的出色使用体验可以说有目共睹,但是近期市场上搭载华为自研麒麟芯片的手机可以说越来越少,不过仍有部分华为5G机型在现货发售,今天便来为大家……终于找到了生活里的松弛感周一无事,在法云安缦品茶白月光这一年眨眼就过去了,叹一口气。这是无所事事的一年,经历了很多不可言说的被动成长,生活仍在继续,焦虑和戾气写在陌生路人行色匆匆的脸上。像我这样的自由职业者……欢乐不停歇!武汉欢乐谷灯光节持续点亮至2月19日长江网讯(见习记者王允祺通讯员高颖)春节期间,湖北省旅游市场持续升温,2023东湖迎春大鱼灯会落地武汉欢乐谷,让众多武汉市民热热闹闹赏灯欢度中国年。春节长假虽然结束,但赏灯及各……大厨教你家常炒饼丝做法,软糯劲道不发坨,比饭店卖的还好吃大厨教你家常炒饼丝做法,软糯劲道不发坨,比饭店卖的还好吃。北方的面食种类丰富多样,不管是做主食亦或是小吃,面食都能很好发挥其作用,包子、馒头、面条等都是最为普通的面食做法,我家……手机玩游戏芯片怎么选?天玑9000已武装到牙齿,选它准没错近日,新一批发布的45个游戏版号中,移动平台游戏达到39个,再次表明了移动游戏市场的兴盛。在不断成长的用户需求驱动下,技术的发展正带领着移动端游戏向着画质更好、帧率更高、延迟更……父母要持证上岗?依法带娃时代即将来临!网友这还敢生吗?为人父母肯定会有这样的困惑为什么自家的孩子总是不听话?为什么总是跟你对着来?想让他自主学习怎么就那么费劲?自家的娃怎么就不能让自己省点心?为人父母……辟谣食物吃饱就是吃够了吗?营养师8个迹象来判断你是不是觉得每天吃饱了,就是吃够了呢?你是不是通过卡路里来计算每天该吃多少食物呢?但是很多时候,你吃饱了,不代表你吃够了,可能营养还是不足。虽然我们每个人对于营养的……人到中年才明白,父亲为什么会沉默01hr作家黑塞在《德米安》里写道:我们可以彼此理解,然而能解读自己的人只有自己。很多文字,年少不解其中意,再读已是文中人。小时候,我们总以为,父爱如山。就是说,父……CBA联赛新赛季惊现死亡之组,宁波富邦惨了CBA联赛新赛季将进行46轮常规赛,其中将20支球队分成四组,同组球队互相对阵四场比赛,不同组球队互相对阵两场比赛。按照上赛季的球队排名,上海、深圳、山东、新疆、宁波富邦队进入……千元机性能如何?实测Note11Pro竟不能打原神转眼间又到了手机厂商扎堆发布新机的下半年,不论是旗舰级市场还是中端机市场都十分火热。就在上周vivo发布了旗下全新T系列的首款产品vivoT1,作为2K价位产品中的性能担当,v……对我影响最深的那本书如今爸爸已成为我作文中的男一号,这要感谢我初一生日时的礼物爸爸送给我的朱自清先生的散文集《背影》。我的爸爸是个修车工,不是修汽车的工程师,而是在街边摆摊修理自行车的小老板……医生建议痛风患者,在春节期间别踩这五大雷区,稳稳当当过大年春节本是举家团圆、让人愉悦和兴奋的传统节日,但是痛风急性发作高峰期。每年春节期间,痛风关节科挤满了看病的患者。之所以会出现痛风,主要跟不合理的饮食、喝酒、喝太多饮料、熬夜……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网