J2V8--java调用JS文件执行js函数的高效类库,高并发下表现依然高效

时间:2025-02-14 13:41:33

前言

现有需求需要前端传入账号密码,调用后台接口返回加密授权数据,而通过账号密码获取授权信息的算法是从其他站点爬到的js中实现的,无法通过Java后端重写一套算法.因此需要把js放在Java中执行

优化

前端给的实现方式,采用ScriptEngine实现

JS文件

var window={};var navigator={};$=window.$||{},pt=||{},RSA==function(){function t(t,e){return new r(t,e)}
function e(t,e){if(e<+11)return uv_alert("Message too long for RSA"),null;for(var i=new Array,n=-1;n>=0&&e>0;){var o=(n--);i[--e]=o}
i[--e]=0;for(var p=new Y,s=new Array;e>2;){for(s[0]=0;0==s[0];)(s);i[--e]=s[0]}
return i[--e]=2,i[--e]=0,new r(i)}
function i(){=null,=0,=null,=null,=null,this.dmp1=null,this.dmq1=null,=null}
function n(e,i){null!=e&&null!=i&&>0&&>0?(=t(e,16),=parseInt(i,16)):uv_alert("Invalid RSA public key")}
function o(t){return (,)}
function p(t){var i=e(t,()+7>>3);if(null==i)return null;var n=(i);if(null==n)return null;var o=(16);return 0==(1&)?o:"0"+o}
function r(t,e,i){null!=t&&("number"==typeof t?(t,e,i):null==e&&"string"!=typeof t?(t,256):(t,e))}
function s(){return new r(null)}
function l(t,e,i,n,o,p){for(;--p>=0;){var r=e*this[t++]+i[n]+o;o=(r/67108864),i[n++]=67108863&r}
return o}
function a(t,e,i,n,o,p){for(var r=32767&e,s=e>>15;--p>=0;){var l=32767&this[t],a=this[t++]>>15,c=s*l+a*r;l=r*l+((32767&c)<<15)+i[n]+(1073741823&o),o=(l>>>30)+(c>>>15)+s*a+(o>>>30),i[n++]=1073741823&l}
return o}
function c(t,e,i,n,o,p){for(var r=16383&e,s=e>>14;--p>=0;){var l=16383&this[t],a=this[t++]>>14,c=s*l+a*r;l=r*l+((16383&c)<<14)+i[n]+o,o=(l>>28)+(c>>14)+s*a,i[n++]=268435455&l}
return o}
function u(t){return (t)}
function g(t,e){var i=gt[(e)];return null==i?-1:i}
function d(t){for(var e=-1;e>=0;--e)t[e]=this[e];=,=}
function h(t){=1,=0>t?-1:0,t>0?this[0]=t:-1>t?this[0]=t+DV:=0}
function f(t){var e=s();return (t),e}
function m(t,e){var i;if(16==e)i=4;else if(8==e)i=3;else if(256==e)i=8;else if(2==e)i=1;else if(32==e)i=5;else{if(4!=e)return void (t,e);i=2}
=0,=0;for(var n=,o=!1,p=0;--n>=0;){var s=8==i?255&t[n]:g(t,n);0>s?"-"==(n)&&(o=!0):(o=!1,0==p?this[++]=s:p+i>?(this[-1]|=(s&(1<<-p)-1)<<p,this[++]=s>>-p):this[-1]|=s<<p,p+=i,p>=&&(p-=))}
8==i&&0!=(128&t[0])&&(=-1,p>0&&(this[-1]|=(1<<-p)-1<<p)),(),o&&(this,this)}
function _(){for(var t=&;>0&&this[-1]==t;)--}
function $(t){if(<0)return"-"+().toString(t);var e;if(16==t)e=4;else if(8==t)e=3;else if(2==t)e=1;else if(32==t)e=5;else{if(4!=t)return (t);e=2}
var i,n=(1<<e)-1,o=!1,p="",r=,s=-r*%e;if(r-->0)for(s<&&(i=this[r]>>s)>0&&(o=!0,p=u(i));r>=0;)e>s?(i=(this[r]&(1<<s)-1)<<e-s,i|=this[--r]>>(s+=-e)):(i=this[r]>>(s-=e)&n,0>=s&&(s+=,--r)),i>0&&(o=!0),o&&(p+=u(i));return o?p:"0"}
function v(){var t=s();return (this,t),t}
function w(){return <0?():this}
function y(t){var e=;if(0!=e)return e;var i=;if(e=,0!=e)return e;for(;--i>=0;)if(0!=(e=this[i]-t[i]))return e;return 0}
function k(t){var e,i=1;return 0!=(e=t>>>16)&&(t=e,i+=16),0!=(e=t>>8)&&(t=e,i+=8),0!=(e=t>>4)&&(t=e,i+=4),0!=(e=t>>2)&&(t=e,i+=2),0!=(e=t>>1)&&(t=e,i+=1),i}
function b(){return <=0?0:*(-1)+k(this[-1]^&)}
function q(t,e){var i;for(i=-1;i>=0;--i)e[i+t]=this[i];for(i=t-1;i>=0;--i)e[i]=0;=+t,=}
function S(t,e){for(var i=t;i<;++i)e[i-t]=this[i];=(-t,0),=}
function T(t,e){var i,n=t%,o=-n,p=(1<<o)-1,r=(t/),s=<<n&;for(i=-1;i>=0;--i)e[i+r+1]=this[i]>>o|s,s=(this[i]&p)<<n;for(i=r-1;i>=0;--i)e[i]=0;e[r]=s,=+r+1,=,()}
function C(t,e){=;var i=(t/);if(i>=)return void(=0);var n=t%,o=-n,p=(1<<n)-1;e[0]=this[i]>>n;for(var r=i+1;r<;++r)e[r-i-1]|=(this[r]&p)<<o,e[r-i]=this[r]>>n;n>0&&(e[-i-1]|=(&p)<<o),=-i,()}
function x(t,e){for(var i=0,n=0,o=(,);o>i;)n+=this[i]-t[i],e[i++]=n&,n>>=;if(<){for(n-=;i<;)n+=this[i],e[i++]=n&,n>>=;n+=}
else{for(n+=;i<;)n-=t[i],e[i++]=n&,n>>=;n-=}
=0>n?-1:0,-1>n?e[i++]=+n:n>0&&(e[i++]=n),=i,()}
function L(t,e){var i=(),n=(),o=;for(=o+;--o>=0;)e[o]=0;for(o=0;o<;++o)e[o+]=(0,n[o],e,o,0,);=0,(),!=&&(e,e)}
function N(t){for(var e=(),i==2*;--i>=0;)t[i]=0;for(i=0;i<-1;++i){var n=(i,e[i],t,2*i,0,1);(t[i+]+=(i+1,2*e[i],t,2*i+1,n,-i-1))>=&&(t[i+]-=,t[i++1]=1)}
>0&&(t[-1]+=(i,e[i],t,2*i,0,1)),=0,()}
function E(t,e,i){var n=();if(!(<=0)){var o=();if(<)return null!=e&&(0),void(null!=i&&(i));null==i&&(i=s());var p=s(),l=,a=,c=-k(n[-1]);c>0?((c,p),(c,i)):((p),(i));var u=,g=p[u-1];if(0!=g){var d=g*(1<<this.F1)+(u>1?p[u-2]>>this.F2:0),h=/d,f=(1<<this.F1)/d,m=1<<this.F2,_=,$=_-u,v=null==e?s():e;for(($,v),(v)>=0&&(i[++]=1,(v,i)),(u,v),(p,p);<u;)p[++]=0;for(;--$>=0;){var w=i[--_]==g?:(i[_]*h+(i[_-1]+m)*f);if((i[_]+=(0,w,i,$,0,u))<w)for(($,v),(v,i);i[_]<--w;)(v,i)}
null!=e&&((u,e),l!=a&&(e,e)),=u,(),c>0&&(c,i),0>l&&(i,i)}}}
function A(t){var e=s();return ().divRemTo(t,null,e),<0&&()>0&&(e,e),e}
function P(t){=t}
function I(t){return <0||()>=0?():t}
function H(t){return t}
function M(t){(,null,t)}
function Q(t,e,i){(e,i),(i)}
function D(t,e){(e),(e)}
function V(){if(<1)return 0;var t=this[0];if(0==(1&t))return 0;var e=3&t;return e=e*(2-(15&t)*e)&15,e=e*(2-(255&t)*e)&255,e=e*(2-((65535&t)*e&65535))&65535,e=e*(2-t*e%)%,e>0?-e:-e}
function j(t){=t,=(),=32767&,=>>15,=(1<<-15)-1,this.mt2=2*}
function U(t){var e=s();return ().dlShiftTo(,e),(,null,e),<0&&()>0&&(e,e),e}
function O(t){var e=s();return (e),(e),e}
function B(t){for(;<=this.mt2;)t[++]=0;for(var e=0;e<;++e){var i=32767&t[e],n=i*+((i*+(t[e]>>15)*&)<<15)&;for(i=e+,t[i]+=(0,n,t,e,0,);t[i]>=;)t[i]-=,t[++i]++}
(),(,t),()>=0&&(,t)}
function R(t,e){(e),(e)}
function F(t,e,i){(e,i),(i)}
function z(){return 0==(>0?1&this[0]:)}
function G(t,e){if(t>4294967295||1>t)return ;var i=s(),n=s(),o=(this),p=k(t)-1;for((i);--p>=0;)if((i,n),(t&1<<p)>0)(n,o,i);else{var l=i;i=n,n=l}
return (i)}
function W(t,e){var i;return i=256>t||()?new P(e):new j(e),(t,i)}
function X(t){ht[ft++]^=255&t,ht[ft++]^=t>>8&255,ht[ft++]^=t>>16&255,ht[ft++]^=t>>24&255,ft>=$t&&(ft-=$t)}
function Z(){X((new Date).getTime())}
function K(){if(null==dt){for(Z(),dt=nt(),(ht),ft=0;ft<;++ft)ht[ft]=0;ft=0}
return ()}
function J(t){var e;for(e=0;e<;++e)t[e]=K()}
function Y(){}function tt(){=0,=0,=new Array}
function et(t){var e,i,n;for(e=0;256>e;++e)[e]=e;for(i=0,e=0;256>e;++e)i=i+[e]+t[e%]&255,n=[e],[e]=[i],[i]=n;=0,=0}
function it(){var t;return =+1&255,=+[]&255,t=[],[]=[],[]=t,[t+[]&255]}
function nt(){return new tt}
function ot(t,e,n){e="e9a815ab9d6e86abbf33a4ac64e9196d5be44a09bd0ed6ae052914e1a865ac8331fed863de8ea697e9a7f63329e5e23cda09c72570f46775b7e39ea9670086f847d3c9c51963b131409b1e04265d9747419c635404ca651bbcbc87f99b8008f7f5824653e3658be4ba73e4480156b390bb73bc1f8b33578e7a4e12440e9396f2552c1aff1c92e797ebacdc37c109ab7bce2367a19c56a033ee04534723cc2558cb27368f5b9d32c04d12dbd86bbd68b1d99b7c349a8453ea75d1b2e94491ab30acf6c46a36a75b721b312bedf4e7aad21e54e9bcbcf8144c79b6e3c05eb4a1547750d224c0085d80e6da3907c3d945051c13c7c1dcefd6520ee8379c4f5231ed",n="10001";var o=new i;return (e,n),(t)}
=o,=n,=p;var pt,rt=0xdeadbeefcafe,st=15715070==(16777215&rt);st&&"Microsoft Internet Explorer"==?(=a,pt=30):st&&"Netscape"!=?(=l,pt=26):(=c,pt=28),=pt,=(1<<pt)-1,=1<<pt;var lt=52;=(2,lt),.F1=lt-pt,.F2=2*pt-lt;var at,ct,ut="0123456789abcdefghijklmnopqrstuvwxyz",gt=new Array;for(at="0".charCodeAt(0),ct=0;9>=ct;++ct)gt[at++]=ct;for(at="a".charCodeAt(0),ct=10;36>ct;++ct)gt[at++]=ct;for(at="A".charCodeAt(0),ct=10;36>ct;++ct)gt[at++]=ct;=I,=H,=M,=Q,=D,=U,=O,=B,=F,=R,=d,=h,=m,=_,=q,=S,=T,=C,=x,=L,=N,=E,=V,=z,=G,=$,=v,=w,=y,=b,=A,=W,=f(0),=f(1);var dt,ht,ft;if(null==ht){ht=new Array,ft=0;var mt;if("Netscape"==&&<"5"&&&&){var _t=(32);for(mt=0;mt<_t.length;++mt)ht[ft++]=255&_t.charCodeAt(mt)}
for(;$t>ft;)mt=(65536*()),ht[ft++]=mt>>>8,ht[ft++]=255&mt;ft=0,Z()}
=J,=et,=it;var $t=256;return{rsa_encrypt:ot}}
(),function(t){function e(){return (4294967295*())}
function i(t,e,i){(!i||i>4)&&(i=4);for(var n=0,o=e;e+i>o;o++)n<<=8,n|=t[o];return(4294967295&n)>>>0}
function n(t,e,i){t[e+3]=i>>0&255,t[e+2]=i>>8&255,t[e+1]=i>>16&255,t[e+0]=i>>24&255}
function o(t){if(!t)return"";for(var e="",i=0;i<;i++){var n=Number(t[i]).toString(16);1==&&(n="0"+n),e+=n}
return e}
function p(t){for(var e="",i=0;i<;i+=2)e+=(parseInt((i,2),16));return e}
function r(t,e){if(!t)return"";e&&(t=s(t));for(var i=[],n=0;n<;n++)i[n]=(n);return o(i)}
function s(t){var e,i,n=[],o=;for(e=0;o>e;e++)i=(e),i>0&&127>=i?((e)):i>=128&&2047>=i?((192|i>>6&31),(128|63&i)):i>=2048&&65535>=i&&((224|i>>12&15),(128|i>>6&63),(128|63&i));return ("")}
function l(t){_=new Array(8),$=new Array(8),v=w=0,b=!0,m=0;var i=,n=0;m=(i+10)%8,0!=m&&(m=8-m),y=new Array(i+m+10),_[0]=255&(248&e()|m);for(var o=1;m>=o;o++)_[o]=255&e();m++;for(var o=0;8>o;o++)$[o]=0;for(n=1;2>=n;)8>m&&(_[m++]=255&e(),n++),8==m&&c();for(var o=0;i>0;)8>m&&(_[m++]=t[o++],i--),8==m&&c();for(n=1;7>=n;)8>m&&(_[m++]=0,n++),8==m&&c();return y}
function a(t){var e=0,i=new Array(8),n=;if(k=t,n%8!=0||16>n)return null;if($=g(t),m=7&$[0],e=n-m-10,0>e)return null;for(var o=0;o<;o++)i[o]=0;y=new Array(e),w=0,v=8,m++;for(var p=1;2>=p;)if(8>m&&(m++,p++),8==m&&(i=t,!d()))return null;for(var o=0;0!=e;)if(8>m&&(y[o]=255&(i[w+m]^$[m]),o++,e--,m++),8==m&&(i=t,w=v-8,!d()))return null;for(p=1;8>p;p++){if(8>m){if(0!=(i[w+m]^$[m]))return null;m++}
if(8==m&&(i=t,w=v,!d()))return null}
return y}
function c(){for(var t=0;8>t;t++)_[t]^=b?$[t]:y[w+t];for(var e=u(_),t=0;8>t;t++)y[v+t]=e[t]^$[t],$[t]=_[t];w=v,v+=8,m=0,b=!1}
function u(t){for(var e=16,o=i(t,0,4),p=i(t,4,4),r=i(f,0,4),s=i(f,4,4),l=i(f,8,4),a=i(f,12,4),c=0,u=2654435769;e-->0;)c+=u,c=(4294967295&c)>>>0,o+=(p<<4)+r^p+c^(p>>>5)+s,o=(4294967295&o)>>>0,p+=(o<<4)+l^o+c^(o>>>5)+a,p=(4294967295&p)>>>0;var g=new Array(8);return n(g,0,o),n(g,4,p),g}
function g(t){for(var e=16,o=i(t,0,4),p=i(t,4,4),r=i(f,0,4),s=i(f,4,4),l=i(f,8,4),a=i(f,12,4),c=3816266640,u=2654435769;e-->0;)p-=(o<<4)+l^o+c^(o>>>5)+a,p=(4294967295&p)>>>0,o-=(p<<4)+r^p+c^(p>>>5)+s,o=(4294967295&o)>>>0,c-=u,c=(4294967295&c)>>>0;var g=new Array(8);return n(g,0,o),n(g,4,p),g}
function d(){for(var t=(,0);8>t;t++)$[t]^=k[v+t];return $=g($),v+=8,m=0,!0}
function h(t,e){var i=[];if(e)for(var n=0;n<;n++)i[n]=255&(n);else for(var o=0,n=0;n<;n+=2)i[o++]=parseInt((n,2),16);return i}
var f="",m=0,_=[],$=[],v=0,w=0,y=[],k=[],b=!0;={encrypt:function(t,e){var i=h(t,e),n=l(i);return o(n)},enAsBase64:function(t,e){for(var i=h(t,e),n=l(i),o="",p=0;p<;p++)o+=(n[p]);return btoa(o)},decrypt:function(t){var e=h(t,!1),i=a(e);return o(i)},initkey:function(t,e){f=h(t,e)},bytesToStr:p,strToBytes:r,bytesInStr:o,dataFromStr:h};var q={};="=",="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",=function(t,e){var i=(e);if(i>255)throw"INVALID_CHARACTER_ERR: DOM Exception 5";return i},=function(t){if(1!=)throw"SyntaxError: Not enough arguments";var e,i,n=,o=,p=,r=[];t=""+t;var s=%3;if(0==)return t;for(e=0;s>e;e+=3)i=p(t,e)<<16|p(t,e+1)<<8|p(t,e+2),((i>>18)),((i>>12&63)),((i>>6&63)),((63&i));switch(-s){case 1:i=p(t,e)<<16,((i>>18)+(i>>12&63)+n+n);break;case 2:i=p(t,e)<<16|p(t,e+1)<<8,((i>>18)+(i>>12&63)+(i>>6&63)+n)}
return ("")},||(=)}
(window),$=window.$||{},$pt=window.$pt||{},$.Encryption=$=function(){function t(t){return e(t)}
function e(t){return u(i(c(t),*_))}
function i(t,e){t[e>>5]|=128<<e%32,t[(e+64>>>9<<4)+14]=e;for(var i=1732584193,n=-271733879,a=-1732584194,c=271733878,u=0;u<;u+=16){var g=i,d=n,h=a,f=c;i=o(i,n,a,c,t[u+0],7,-680876936),c=o(c,i,n,a,t[u+1],12,-389564586),a=o(a,c,i,n,t[u+2],17,606105819),n=o(n,a,c,i,t[u+3],22,-1044525330),i=o(i,n,a,c,t[u+4],7,-176418897),c=o(c,i,n,a,t[u+5],12,1200080426),a=o(a,c,i,n,t[u+6],17,-1473231341),n=o(n,a,c,i,t[u+7],22,-45705983),i=o(i,n,a,c,t[u+8],7,1770035416),c=o(c,i,n,a,t[u+9],12,-1958414417),a=o(a,c,i,n,t[u+10],17,-42063),n=o(n,a,c,i,t[u+11],22,-1990404162),i=o(i,n,a,c,t[u+12],7,1804603682),c=o(c,i,n,a,t[u+13],12,-40341101),a=o(a,c,i,n,t[u+14],17,-1502002290),n=o(n,a,c,i,t[u+15],22,1236535329),i=p(i,n,a,c,t[u+1],5,-165796510),c=p(c,i,n,a,t[u+6],9,-1069501632),a=p(a,c,i,n,t[u+11],14,643717713),n=p(n,a,c,i,t[u+0],20,-373897302),i=p(i,n,a,c,t[u+5],5,-701558691),c=p(c,i,n,a,t[u+10],9,38016083),a=p(a,c,i,n,t[u+15],14,-660478335),n=p(n,a,c,i,t[u+4],20,-405537848),i=p(i,n,a,c,t[u+9],5,568446438),c=p(c,i,n,a,t[u+14],9,-1019803690),a=p(a,c,i,n,t[u+3],14,-187363961),n=p(n,a,c,i,t[u+8],20,1163531501),i=p(i,n,a,c,t[u+13],5,-1444681467),c=p(c,i,n,a,t[u+2],9,-51403784),a=p(a,c,i,n,t[u+7],14,1735328473),n=p(n,a,c,i,t[u+12],20,-1926607734),i=r(i,n,a,c,t[u+5],4,-378558),c=r(c,i,n,a,t[u+8],11,-2022574463),a=r(a,c,i,n,t[u+11],16,1839030562),n=r(n,a,c,i,t[u+14],23,-35309556),i=r(i,n,a,c,t[u+1],4,-1530992060),c=r(c,i,n,a,t[u+4],11,1272893353),a=r(a,c,i,n,t[u+7],16,-155497632),n=r(n,a,c,i,t[u+10],23,-1094730640),i=r(i,n,a,c,t[u+13],4,681279174),c=r(c,i,n,a,t[u+0],11,-358537222),a=r(a,c,i,n,t[u+3],16,-722521979),n=r(n,a,c,i,t[u+6],23,76029189),i=r(i,n,a,c,t[u+9],4,-640364487),c=r(c,i,n,a,t[u+12],11,-421815835),a=r(a,c,i,n,t[u+15],16,530742520),n=r(n,a,c,i,t[u+2],23,-995338651),i=s(i,n,a,c,t[u+0],6,-198630844),c=s(c,i,n,a,t[u+7],10,1126891415),a=s(a,c,i,n,t[u+14],15,-1416354905),n=s(n,a,c,i,t[u+5],21,-57434055),i=s(i,n,a,c,t[u+12],6,1700485571),c=s(c,i,n,a,t[u+3],10,-1894986606),a=s(a,c,i,n,t[u+10],15,-1051523),n=s(n,a,c,i,t[u+1],21,-2054922799),i=s(i,n,a,c,t[u+8],6,1873313359),c=s(c,i,n,a,t[u+15],10,-30611744),a=s(a,c,i,n,t[u+6],15,-1560198380),n=s(n,a,c,i,t[u+13],21,1309151649),i=s(i,n,a,c,t[u+4],6,-145523070),c=s(c,i,n,a,t[u+11],10,-1120210379),a=s(a,c,i,n,t[u+2],15,718787259),n=s(n,a,c,i,t[u+9],21,-343485551),i=l(i,g),n=l(n,d),a=l(a,h),c=l(c,f)}
return 16==v?Array(n,a):Array(i,n,a,c)}
function n(t,e,i,n,o,p){return l(a(l(l(e,t),l(n,p)),o),i)}
function o(t,e,i,o,p,r,s){return n(e&i|~e&o,t,e,p,r,s)}
function p(t,e,i,o,p,r,s){return n(e&o|i&~o,t,e,p,r,s)}
function r(t,e,i,o,p,r,s){return n(e^i^o,t,e,p,r,s)}
function s(t,e,i,o,p,r,s){return n(i^(e|~o),t,e,p,r,s)}
function l(t,e){var i=(65535&t)+(65535&e),n=(t>>16)+(e>>16)+(i>>16);return n<<16|65535&i}
function a(t,e){return t<<e|t>>>32-e}
function c(t){for(var e=Array(),i=(1<<_)-1,n=0;n<*_;n+=_)e[n>>5]|=((n/_)&i)<<n%32;return e}
function u(t){for(var e=m?"0123456789ABCDEF":"0123456789abcdef",i="",n=0;n<4*;n++)i+=(t[n>>2]>>n%4*8+4&15)+(t[n>>2]>>n%4*8&15);return i}
function uin2hex(str){var maxLength=16;str=parseInt(str);for(var hex=(16),len=,i=len;maxLength>i;i++)hex="0"+hex;for(var arr=[],j=0;maxLength>j;j+=2)("\\x"+(j,2));var result=("");return eval('result="'+result+'"'),result;}
function g(t){for(var e=[],i=0;i<;i+=2)((parseInt((i,2),16)));return ("")}
function h(e,i,n,o){n=n||"",e=e||"";i=uin2hex(i);for(var p=o?e:t(e),r=g(p),s=t(r+i),l=((),!0),a=Number(/2).toString(16);<4;)a="0"+a;(s);var c=(p+(i)+a+l);("");for(var u=Number(/2).toString(16);<4;)u="0"+u;var h=.rsa_encrypt(g(u+c));return (g(h)).replace(/[\/\+=]/g,function(t){return{"/":"-","+":"*","=":"_"}
[t]})}
function f(e,i,n){var o=n?e:t(e),p=o+(),r=RSA.rsa_encrypt(p);return r}
var m=1,_=8,v=32;return{getEncryption:h,getRSAEncryption:f,md5:t}}
()
function getEncryption(e,i,n){var p=$.(e,i,n);return p;}

Java文件

/**
 * js和java通讯接口
 */
public interface JavaScriptInterface {
    String getEncryption(String pwd, String user, String random);
}
import ;
import ;
import ;
import ;
import ;

/**
 *
 */
public class RSA {

    /**
     * 加密
     * @param pwd
     * @param user 
     * @param random 
     * @return
     */
    public static String encrpt(String pwd, String user, String random) {
        ScriptEngine engine = new ScriptEngineManager()
                .getEngineByName("JavaScript");
        FileReader reader = null;
        try {
            reader = new FileReader(().getResource("").getPath());
            (reader);
            if (engine instanceof Invocable) {
                Invocable invocable = (Invocable) engine;
                JavaScriptInterface executeMethod = invocable
                        .getInterface();
                return (pwd, user, random);
            }
            return null;
        } catch (Exception e) {
            ();
        } finally {
            if (null != reader) {
                try {
                    ();
                } catch (IOException e) {
                    ();
                }
            }
        }
        return null;
    }
}

按照前端给的这套实现方式上线后,白天网站流量较小没什么问题,晚上平台流量变大后,运维很快发现服务器cpu负载飙升是平时的7倍左右,服务器随时可能宕机.然后开始加班优化
检查代码发现是*(pwd, user, random)*这个方法执行很慢要5s左右,而这个接口又是一个高频请求的接口,因此这边堆积大量请求无法处理,拉胯整个服务器

然后上网查资料,最后找的 j2v8 据说很快,然后引入项目开始尝试集成

maven依赖
Linux版

 <dependency>
            <groupId>.j2v8</groupId>
            <artifactId>j2v8_linux_x86_64</artifactId>
            <version>3.1.6</version>
        </dependency>

windows与mac版

  V8执行JS本地测试使用对应平台版本
        <dependency>
            <groupId>.j2v8</groupId>
            <artifactId>j2v8_macosx_x86_64</artifactId>
            <version>4.6.0</version>
        </dependency>
        <dependency>
            <groupId>.j2v8</groupId>
            <artifactId>j2v8_win32_x86_64</artifactId>
            <version>4.6.0</version>
        </dependency>

首先js是一个不变的文件,因此把他放在类初始化加载可以节约时间,

 static {
        fileStr =  (new File(().getResource("encryption/").getPath()),"UTF-8");
    }

然后调用V8类库函数,这方面资料不多,需要自己尝试V8里面的函数 ,这个方法尝试后发现比之前快,但是还是要2秒左右,上线cpu负载还是很高,不能解决高并发下接口的可用,然后换成executeStringFunction这个函数,执行速度直接毫秒级别,不多说直接上生产,几分钟不到生产服务器的cpu降至平时正常水平10%左右,解决完问题已是凌晨,回家睡觉

  /**
     * 加密
     * @param pwd
     * @param user 
     * @param random 
     * @return
     */
    private String encrpt(String pwd, String user, String random) {
        V8 runtime = V8.createV8Runtime();
        V8Array v8Array = new V8Array(runtime);
        (pwd).push(user).push(random);
        try {
            (fileStr);
           /* Object getEncryption = ("getEncryption", pwd, user,random);*/
            String getEncryption = ("getEncryption",v8Array);
            return getEncryption;
        }catch (Exception e){
            ("encrpt failed",e);
            ("encrpt failed");
        }finally {
            ();
            ();
        }
        return null;
    }

总结

J2V8这方面资料网上很少也很不全,有的只是简单的场景,并不知道在高并发下的表现,因此找到合适的函数花费了不少时间,在此记录下