专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

为什么有些自闭症孩子会出现哭着哭着却又笑起来的现象?今天聊聊关于自闭症一些特殊的行为,为什么有些自闭症孩子会出现不由自主的笑,还有的笑着笑着就哭了哭着哭着又笑了,我们接触的案例里很多大龄自闭症孩子会无意识地笑,为什么会出现这种现象呢孩子发烧,布洛芬和对乙酰氨基酚买不到怎么办?可以试试这些方法最近,很多药店的退烧药都被扫空了,那些没有抢到药的,无奈之下只能用这样的方式来给娃退烧。只能说思路很清奇,但做法不可模仿。因为使用这样的冰帽只是把局部的温度降低了,但发烧不是局部地亲子幼儿英文有声点读绘本大全多课吧分类资源目录网盘资源下载如需上述资源,请查看资源获取方式!亲子幼儿英文有声点读绘本大全目录1亲子幼儿147英文有声点读绘本大全0。使用说明1。图片点读2。只可电脑点读的材料BritannicaDiscov中国最大的美妆品牌店开业了!距2017年3月8日品牌创立5年多之后,花西子终于开出了第一家全球旗舰店。12月15日,花西子线下首店花西子全球旗舰店西湖隐园在杭州西子湖畔正式开业。凭借独具东方艺术雅韵且创新时尚植发是越密越好吗?一头乌黑浓密的秀发是很多人都想要的,很多发友在植发前也会产生同样的疑问,能不能把头发植得密集些?那么,植发真的越密越好吗?根据我多年的手术经验看来,植发并不是越密越好,正所谓过犹不2023食饮色彩趋势3种万能使用法,学会时尚与快销的色彩搭配近日,美国营养巨头ADM发布了最新的2023年度风味及色彩趋势,总结出明年食品饮料行业四大发展风向,其中梦幻紫芭比粉深海蓝活力橙作为当选最新色彩趋势。妮彩色彩搭配培训班总结出品牌高洁面没输过?菲诗小铺洗面奶内卷天花板近几年受疫情影响,韩妆品牌们逐渐降温,尤其是在线下市场,规模不断萎缩。在线上,韩妆也遭遇了国货平价彩妆品牌崛起的冲击,其式微似乎成为行业共识。然而菲诗小铺THEFACESHOP却在我们的社会在不断贬低底层的普通人我们的社会在不断贬低底层的普通人,打击他们的自信心,让他们在思想上以为他们这样的困难的处境就是自己的原因。必须承认一个社会本来就是有不同阶层共同组成的,人人不可能都做人上人。难道国你身边的以下几种人,是在装老实文夏莫01卷首语人心,藏在皮囊之下,让人无法真切地看清它的真与假。在快节奏的生活中,人与人之间交往,也渐渐变得更加功利。身边,常常潜伏着一些城府很深的人。有些人,看似很容易亲近,看山花烂漫仙乳峰马贵镇双乳峰风光无限。李俊摄吴献基高州市深镇镇北倚云开山脉大雾岭群峰,名胜景点颇多,旅游资源十分丰富,有著名的仙人洞古松栖鹭仙人仰睡原始森林天河瀑布等。其中闻名遐迩的仙乳峰,为海拔厦门月月十五查餐厅走进翔安两家餐饮店执法人员在临家社区餐饮翔安店后厨进行检查。(记者王协云摄)厦门日报讯(记者陈泥通讯员刘启国)在乡村中感受美景,在古厝中感受乡愁,在农家乐中寻觅美食近年来,翔安独特的民俗文化丰富的山
神舟出狠招首家引领13代RTX3050高刷本迈入4千元时代,预售破万对于众多的玩家朋友来说,4千多元能入手游戏本可以说是大伙的梦想,随着英特尔的酷睿13代及AMD的锐龙7000系列处理器在年初发布,众多电脑商家也都陆续推出了自己的游戏本。走性价比路牧之野人工智能时代,不要乱折腾孩子了编者按本文为作者授权,秦安战略独家原创刊发,转载自公众号之乎者野记,有很多精彩内容,欢迎大家关注。不要瞎折腾孩子。大多数盲从报的那些辅导班,所选择的方向,其实都是费时费力,甚至起到萃雪肤长痘怎么办?造成痘痘的六个原因长痘一直是令人非常苦恼的一件事,经常感叹明明自己已经非常注意护肤和饮食了,为什么痘痘依旧冒不停呢!接下来萃雪肤就来分析一下长痘的原因。一遗传原因痘痘不会遗传,但是肤质会遗传,肤质是被网红带火了一种穿法拖鞋袜子外穿,意想不到的洋气好看如今的互联网世界真的是将任何信息都流传的非常快速且准确的,尤其是近期非常流行的穿搭和时尚的趋向,都几乎会被网红穿搭博主们所分享和衬显出来,近段时间的热门穿搭就是被网红们带火的拖鞋袜2个技巧2个思路让你明白,春天的卫衣怎么穿才够时髦洋气告别了冬日迎来了春天,保暖也不再是女性朋友们搭配的第一需求了,现在女生朋友们都会想方设法地把自己的身材优势给展现出来,然而说到如今什么样的单品利用率最高,大家仍然想到了卫衣,看似平张子枫狂瘦到认不出,穿裙子瘦得像泰星Mai,网友pua?内娱最近这是又咋了?女明星怎么又一个赛一个的瘦了。上个月虞书欣刚被曝在郭敬明的要求下瘦成小鱼干这两天连张子枫也狂瘦到认不出了?最近张子枫在成都出席开业仪式的路透照在网上爆火。生图当彩色光刻胶第一股,光刻胶领域的龙头企业这是一家我国光刻胶领域的龙头企业,而凭借着在半导体领域的强大竞争力,这家企业不仅获得了国家集成电路产业基金的战略入股,就连中芯国际也成为了该公司的长期客户。1核心竞争力客户优势公司面试官我裤子拉链开了,你怎么提醒我?他的回答,当场录用前段时间,后台看到不少年轻读者咨询求职相关的问题。还有人给我转了一则消息某公司面试题竟然要求回答如厕习惯吃饭时长入睡时间这些年,我没少见一些奇形怪状的面试题。比如某品牌经理IrenPPT里的时间轴,怎么设计才好看?哈喽,大家好呀,我是三石今天给大家总结了关于美化时间轴的一些方法。时间轴是个应用很广的一种页面,相信大家都做过或者接触过。但是在大家的印象里面,时间轴是不是都是一条直线加上一个箭头午睡会影响寿命?中老人午睡谨忌3不要,很多人都睡错了据一项科学调查表示只有三成人能够做到定时午睡,而这其中百分之八十的人因为不会午睡,白白浪费了午睡时间,更有许多人认为午睡其实是没有必要的,非常困的时候眯一下就可以。但不可否认的是午老人带孙在地铁车厢内小便!工作人员每个站点均配有洗手间华声在线2月9日讯(文视频全媒体见习记者王翊玮)2月7日,一名长沙网友上传了一段视频火遍全网。视频中一位穿着橙色袄子的老人在长沙地铁6号线车厢内带小孩小便。该网友还配文称,小孩已经
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网