应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

springgateway实现接口数据加密传输

  在一些对安全要求很高的系统,需要对数据进行加密传输,我们可以采用在网关加密解密数据传输提高系统安全性,加密解密算法使用rsa(相对性能影响较小),java代码如下importcn。hutool。crypto。SecureUtil;importcn。hutool。crypto。asymmetric。KeyType;importcn。hutool。crypto。asymmetric。RSA;importcom。google。common。base。Joiner;importio。netty。buffer。ByteBufAllocator;importlombok。extern。slf4j。Slf4j;importorg。apache。commons。compress。utils。Lists;importorg。apache。commons。lang3。StringUtils;importorg。reactivestreams。Publisher;importorg。springframework。cloud。context。config。annotation。RefreshScope;importorg。springframework。cloud。gateway。filter。GatewayFilterChain;importorg。springframework。cloud。gateway。filter。GlobalFilter;importorg。springframework。core。Ordered;importorg。springframework。core。io。buffer。DataBuffer;importorg。springframework。core。io。buffer。DataBufferFactory;importorg。springframework。core。io。buffer。DataBufferUtils;importorg。springframework。core。io。buffer。NettyDataBufferFactory;importorg。springframework。http。HttpMethod;importorg。springframework。http。HttpStatus;importorg。springframework。http。MediaType;importorg。springframework。http。server。reactive。ServerHttpRequest;importorg。springframework。http。server。reactive。ServerHttpRequestDecorator;importorg。springframework。http。server。reactive。ServerHttpResponse;importorg。springframework。http。server。reactive。ServerHttpResponseDecorator;importorg。springframework。stereotype。Component;importorg。springframework。web。server。ServerWebExchange;importreactor。core。publisher。Flux;importreactor。core。publisher。Mono;importjava。net。URI;importjava。nio。CharBuffer;importjava。nio。charset。Charset;importjava。nio。charset。StandardCharsets;importjava。util。List;importjava。util。concurrent。atomic。AtomicReference;importstaticorg。springframework。cloud。gateway。support。ServerWebExchangeUtils。ORIGINALRESPONSECONTENTTYPEATTR;ClassNameAppFilterDescriptionTODOAuthorljqDate2022121316:16Version1。0Slf4jRefreshScopeComponentpublicclassAppFilterimplementsGlobalFilter,Ordered{privatestaticJoinerjoinerJoiner。on();OverridepublicMonoVoidfilter(ServerWebExchangeexchange,GatewayFilterChainchain){如果存在appId走应用认证接口ServerHttpRequestrequestexchange。getRequest();StringappIdrequest。getHeaders()。getFirst(appId);if(StringUtils。isNotBlank(appId)){if(exchange。getRequest()。getMethod()。equals(HttpMethod。POST)){StringbodyStrgetBodyStr(exchange。getRequest()。getBody());log。info(加密原始数据bodyStr);重新封装请求因为请求体内容已被消费,需要重新写入URIurirequest。getURI();requestrequest。mutate()。uri(uri)。build();这块需要掉用微服务进行应用权限校验并返回应用公私钥这里使用hutu工具包对数据进行rsa加解密startStringprivateKey30820155020100300d06092a864886f70d01010105000482013f3082013b020100024100b9c7d70130df32ff4f41f79390fc085439e917a632b2707c0d3d4c8da0cedc22e55d66ddbe59287b16aa63ff3a98d23e3938da0ceabac4167204e09a3a0cd88f020301000102401f5ae821ce52cd73a3b7d98631612832b6f76d4362a9152d0abafed1a4836549c042700fc26b750a460c999c9a0107aec4cdfecde897606dcc56bb653aee1a89022100f773cf5f947e4eb442b8a2ba42929a557e2b6c48869347296fe6e5a5c7e12513022100c032ac9e7c2ca7ca817bdd8626fe25f427188c10bc42206fd3605764f767ba15022100f0653ded29219bec5b756c016f736523f132d63b8f21bd5c702deca4258e80a9022043e3625fd4c2bd3de580c81db3b63fd7bedb87d5fd796a15b5d728e78c104285022100879796fca38aadf54a0dd90959d1eef452fffe504d73dbaff887f5089e36cd19;StringpublicKey305c300d06092a864886f70d0101010500034b003048024100b9c7d70130df32ff4f41f79390fc085439e917a632b2707c0d3d4c8da0cedc22e55d66ddbe59287b16aa63ff3a98d23e3938da0ceabac4167204e09a3a0cd88f0203010001;RSArsaSecureUtil。rsa(privateKey,publicKey);bodyStrrsa。decryptStr(bodyStr,KeyType。PrivateKey);log。info(解密数据:bodyStr);这块需要掉用微服务进行应用权限校验并返回应用公私钥这里使用hutu工具包对数据进行rsa加解密end将解密数据封装向下传递DataBufferbodyDataBufferstringBuffer(bodyStr);FluxDataBufferbodyFluxFlux。just(bodyDataBuffer);requestnewServerHttpRequestDecorator(request){OverridepublicFluxDataBuffergetBody(){returnbodyFlux;}};可以选择对返回体也进行加密ResBodyEncryptDecoratorresponseDecoratornewResBodyEncryptDecorator(exchange。getResponse(),exchange。getAttribute(ORIGINALRESPONSECONTENTTYPEATTR),rsa);ServerHttpRequestnewRequestrequest。mutate()。build();returnchain。filter(exchange。mutate()。request(newRequest)。response(responseDecorator)。build());}else{可以将get请求也设置特定的参数读取加解密可以照着post请求做returnAppIdInvalid(exchange);}}else{returnAppIdInvalid(exchange);}}publicstaticclassResBodyEncryptDecoratorextendsServerHttpResponseDecorator{privateDataBufferFactorybufferFactory;privateStringcontentType;privateRSArsa;publicResBodyEncryptDecorator(ServerHttpResponsedelegate,StringcontentType,RSArsa){super(delegate);this。contentTypecontentType;this。bufferFactorydelegate。bufferFactory();this。rsarsa;}OverridepublicMonoVoidwriteWith(Publisherlt;?extendsDataBufferbody){log。info(得到响应体);if(getStatusCode()。equals(HttpStatus。OK)bodyinstanceofFlux){获取响应ContentType记录JSON格式数据的响应体if(!StringUtils。isEmpty(contentType)contentType。contains(MediaType。APPLICATIONJSONVALUE)){Fluxlt;?extendsDataBufferfluxBodyFlux。from(body);解决返回体分段传输returnsuper。writeWith(fluxBody。buffer()。map(dataBuffers{ListStringlistLists。newArrayList();dataBuffers。forEach(dataBuffer{byte〔〕contentnewbyte〔dataBuffer。readableByteCount()〕;dataBuffer。read(content);DataBufferUtils。release(dataBuffer);list。add(newString(content,Charset。forName(UTF8)));});StringresponseDatajoiner。join(list);log。info(得到响应体内容:{},responseData。replaceAll(,)。replaceAll(,));responseDatarsa。encryptBase64(responseData,KeyType。PublicKey);returnbufferFactory。wrap(responseData。getBytes());}));}}returnsuper。writeWith(body);}}token无效,消息返回paramexchangereturnprivateMonoVoidAppIdInvalid(ServerWebExchangeexchange){ServerHttpResponseresponseexchange。getResponse();byte〔〕bits{result:1,message:应用不存在,data:null}。getBytes(StandardCharsets。UTF8);DataBufferbufferresponse。bufferFactory()。wrap(bits);response。setStatusCode(HttpStatus。UNAUTHORIZED);指定编码,否则在浏览器中会中文乱码response。getHeaders()。add(ContentType,textplain;charsetUTF8);returnresponse。writeWith(Mono。just(buffer));}获取请求体内容parambodyreturnprivateStringgetBodyStr(FluxDataBufferbody){AtomicReferenceStringbodyRefnewAtomicReference();body。subscribe(buffer{CharBuffercharBufferStandardCharsets。UTF8。decode(buffer。asByteBuffer());DataBufferUtils。release(buffer);bodyRef。set(charBuffer。toString());log。info(charBuffer。toString());});获取requestbodyreturnbodyRef。get();}privateDataBufferstringBuffer(Stringvalue){byte〔〕bytesvalue。getBytes(StandardCharsets。UTF8);NettyDataBufferFactorynettyDataBufferFactorynewNettyDataBufferFactory(ByteBufAllocator。DEFAULT);DataBufferbuffernettyDataBufferFactory。allocateBuffer(bytes。length);buffer。write(bytes);returnbuffer;}publicstaticvoidmain(String〔〕args){StringprivateKey30820155020100300d06092a864886f70d01010105000482013f3082013b020100024100b9c7d70130df32ff4f41f79390fc085439e917a632b2707c0d3d4c8da0cedc22e55d66ddbe59287b16aa63ff3a98d23e3938da0ceabac4167204e09a3a0cd88f020301000102401f5ae821ce52cd73a3b7d98631612832b6f76d4362a9152d0abafed1a4836549c042700fc26b750a460c999c9a0107aec4cdfecde897606dcc56bb653aee1a89022100f773cf5f947e4eb442b8a2ba42929a557e2b6c48869347296fe6e5a5c7e12513022100c032ac9e7c2ca7ca817bdd8626fe25f427188c10bc42206fd3605764f767ba15022100f0653ded29219bec5b756c016f736523f132d63b8f21bd5c702deca4258e80a9022043e3625fd4c2bd3de580c81db3b63fd7bedb87d5fd796a15b5d728e78c104285022100879796fca38aadf54a0dd90959d1eef452fffe504d73dbaff887f5089e36cd19;StringpublicKey305c300d06092a864886f70d0101010500034b003048024100b9c7d70130df32ff4f41f79390fc085439e917a632b2707c0d3d4c8da0cedc22e55d66ddbe59287b16aa63ff3a98d23e3938da0ceabac4167204e09a3a0cd88f0203010001;RSArsaSecureUtil。rsa(privateKey,publicKey);Stringdata{current:1,size:20,param:{afterSale:Y,commitTimeStart:2011111100:00:00}};Stringencryptrsa。encryptBase64(data,KeyType。PrivateKey);Stringdecyptrsa。decryptStr(encrypt,KeyType。PublicKey);System。out。println(encrypt);System。out。println(decypt);encryptrsa。encryptBase64(data,KeyType。PublicKey);decyptrsa。decryptStr(encrypt,KeyType。PrivateKey);System。out。println(encrypt);System。out。println(decypt);}OverridepublicintgetOrder(){return2;}}
  遇到的问题:
  1有可能无法获取到请求体里面的内容可以参考https:zhuanlan。zhihu。comp471402045
  效果:
  postman请求
  服务器日志

欧美街拍达人示范4款丝巾帮你轻松提升时髦感春季丝巾搭配look1时尚指数:四颗星小编点评:卡其色的连体裤相当的帅气有型,有种军装风,不过女人太帅了没有女人味了,脖子间系一根橘色丝巾,让你华丽变身小女人。……前广东福将遭网红队放弃,身高和伤病断送前程,新赛季或无球可打日前,在江苏同曦队官方宣布解雇球队主教练刘铁以后,关于新赛季球队的教练人选也成为了球迷热议的焦点。从现如今看来,目前有多支球队的主教练都已经遭到了解雇的情况下,目前赋闲在家的教……巴拿马运河堪称摇钱树,年赚数十亿美元,美国当年是如何抢走的?早在西班牙号称日不落帝国的时候,西班牙人就在中美洲发现了一处可以后天靠地形吃饭的地方巴拿马地峡。此后的西班牙王室曾经举国之力在此开凿运河,再到后来哥伦比亚雇佣法国公司开凿运河,……在缅甸,300人民币就能享受私人导游,而且还都是大学生如果大家到缅甸旅行,一定会看到这样的一种场景,在缅甸的旅行社旁,会有大量的游客排队等候,他们都在挑选适合自己的私人女导游。据说缅甸的私人女导游都是当地的大学生,年轻又漂亮……光遇官方宣布悄悄话常驻,这三个功能,能带来你想象不到的快乐光遇:官方宣布悄悄话常驻,这三个功能,能带来你想象不到的快乐前言:大家好,我是阿瑶,每天为你发布游戏领域最新情报。熟悉光遇的小伙伴,肯定听说过悄悄话功能,这是……出境团队游即将恢复,2月国际航班表出炉,多条洲际航线加密!2月6日恢复出境团队游!2023年2月6日起,试点恢复全国旅行社及在线旅游企业经营中国公民赴有关国家出境团队旅游和机票酒店业务。即日起,旅行社及在线旅游企业可开展产……马斯克锐评人工智能是人类最大的威胁之一,程度超过核技术IT之家2月16日消息,最近大火的ChatGPT显示人工智能已经得到了令人难以置信的发展,而根据埃隆马斯克的说法,这是我们都应该担心的事情。马斯克在阿拉伯联合酋长国迪拜举……我们的故事我曾在童年恣意玩耍,体会过在户外奔跑的乐趣,所以不愿孩子们被锁在城市的高楼大厦里。我要为孩子们创造更生动快乐的童年。HUDIHUDI的诞生在手游里匹配到了一个小孩子……浅谈莱昂纳德从大学时代开始喜欢看NBA,那时候喜欢的还是科比,自从科比离世以后,喜欢上马刺的莱昂纳德,说不出为什么,仅仅是单纯的喜欢这位球星,沉默的性格,不苟言笑,低调,这大概是小卡的代名……巴特勒23分阿德巴约1811热火胜骑士!NBA常规赛2月1日继续进行,最终,热火以10097战胜骑士。首节开始,米切尔和阿伦接连得分帮助骑士打出165开局。巴特勒迅速独得11分率队回敬132扳平比分!随后双方各……python小波分析海温数据的时频域分解小波分析附源码今天想搞一个时频分析,这个东西自己没有写过代码,用过别人的代码,但不知道怎么操作。百度一翻,得到一个现成的例子,又在CSDN上有人写了一段类似的代码,效果图一致,是一个开源的g……在太空中,杨利伟曾听见神秘的敲门声,幸好只是虚惊一场综述人类从第一次抬头仰望星空,到成功飞入太空,经历了漫长的岁月。在这期间,我们曾经傲慢过,认为自己就是主宰地球的造物主。不过随着启智,我们发现这天地远比我们看到的要……
幼师转行做主持人,嫁上级丈夫,当影视副主席,方琼是如何做到的2003年,怀孕的方琼坚持把《激情久久》这档节目的最后一期主持完,本来已经怀孕的她是应该休假的。但是方琼的主持能力非常强,台里坚持要她把这档节目主持完再走,在90年代末期……人们是怎样发现地球自转不是24小时的?地球是不是均衡地每24小时旋转一周呢?地球自转一周24小时,多少世纪以来,人们从未对这一点产生过什么怀疑。可是真没想到,地球欺骗了人们,而且欺骗了早期许许多多的天文……章泽天从奶茶妹妹到京东夫人,她的头脑远比想象的复杂2018年,刘强东侵犯女大学生的消息一传出,就瞬间登顶新闻热搜,仅仅就在半个小时后,京东的股价就蒸发了将近200亿。刘强东也因此从一名受人尊敬的总裁,变成了人……美国运动员晒乐高快看这是中国的长城,太可爱了!海外网2月11日电参加北京冬奥会的外国运动员都是如何被中国文化种草的?美国单板滑雪运动员泰莎莫德11日在社交平台晒出自己拼凑的长城乐高,直呼可爱。泰莎11日晒出自己动手拼……健康的秘诀就是一天一个柠檬我每天都喝柠檬水,这样的习惯已经坚持好多年了。原来的初衷只是为了美白,顺便清理一下肠道,后来通过学习慢慢发现柠檬还有很多我不知道的神奇功效。怪不得这些年来我头疼脑热的状况都很少……尼泊尔中国人点评之合金篇1(智者无虑仁者无忧)关注尼泊尔之前,我几乎走遍了全国各大风景名胜,因为工作机会,过去因公差经常出国,但大多来去匆匆,从没有足够的时间去欣赏异国的风景。等我有了时间又发生了疫情〔笑哭〕〔笑哭〕……NBA球队最新实力排行榜,勇士稳居第一,湖人狂降最新球队实力排名已经出炉,数据截止到上周美国时间周六。1。勇士(15胜2负),上周排名:1每48分钟回合数:100。6(6),每百回合得分:112。9(2),每百回……浅评幻塔现在的游戏都喜欢沾点科幻?前段时间,二次元动作类游戏《幻塔》开启了公测,在游戏圈引发了一轮热潮尤其是当玩家们发现,游戏标签中存在二次元、开放世界等词条时,都会下意识地将《幻塔》与《原神》比较一番。……海底有一个大家伙,能干扰电子设备,是10万年前沉没的太空船?波罗的海是位于欧洲大陆的一片海洋,这里是最著名的旅游景区,不仅风景如画般美丽,还有着大量的自然资源,对北欧的多个国家的发展有着不可替代的作用。波罗的海也是地球上最浅的海洋……中国品牌强势崛起!BE范德安实力碾压国际游泳品牌2022年全球经济遇冷,消费持续疲软。在多重挑战之下,中国第一时尚泳装品牌BE范德安却逆势而起,以高速增长的态势引领品牌自信向上,并与新晋代言人吉克隽逸携手,创造了一个声量与销……姚明冤枉!篮协阻止李月汝赴美,台湾名嘴揭露真相,大姚背锅了3月31日的时候美国媒体报道,中国女篮内线核心李月汝已经和WNBA芝加哥天空队签下了一份新秀合同,芝加哥天空队的总经理兼主教练詹姆斯韦德也表态了非常期待李月汝能够尽早进入球队。……赵丽颖幸福到万家首播卫视第一,婚闹村霸太敢拍,这剧要火了由赵丽颖、刘威、唐曾、罗晋、曹征等人主演,郑晓龙导演、赵冬苓编剧的40集农村剧《幸福到万家》开播,这部剧也是赵丽颖演了这么多年都市剧,古偶剧后首次演的农村题材电视剧,没开播前想……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网