java调用多个js文件中的函数

框架:springboot框架

java版本:JDK8

需求:java类中要调用js文件中的函数,该函数又调用了另一个js文件的函数。

解决方案:

一、将所有的js文件合并到一个js文件中,java调用单个js文件的例子,网上很多,不赘述。

二、依次读取多个js文件到scriptEngine,代码如下:

public static String getRsaPass(String pass, String enc, String mod) {
	     try {
	    	 String result = "";
	    	 String md5p = MD5Util.MD5(pass).toLowerCase();
	    	 ScriptEngineManager manager = new ScriptEngineManager();   
	    	 //创建javascript引擎
	    	 ScriptEngine engine = manager.getEngineByName("javascript");     
	    	 //依次读取多个js文件
	    	 ClassPathResource resource = new 
                    ClassPathResource("/static/js/login/SecurityUtil.js");
	    	 File file = resource.getFile();
	    	 FileReader reader = new FileReader(file);   
	    	 
	    	 ClassPathResource resource2 = new ClassPathResource("/static/js/login/RsaUtils.js");
	    	 File file2 = resource2.getFile();
	    	 FileReader reader2 = new FileReader(file2);   
	    	 
	    	 ClassPathResource resource3 = new ClassPathResource("/static/js/login/RandomUtil.js");
	    	 File file3 = resource3.getFile();
	    	 FileReader reader3 = new FileReader(file3);   
	    	 
	    	 engine.eval(reader);   
	    	 engine.eval(reader2);   
	    	 engine.eval(reader3);   
	    	 
	    	 if(engine instanceof Invocable) {    
		    	 Invocable invoke = (Invocable)engine;    
		    	 //调用函数,第一个是js的函数名,后边的是函数的参数
		    	 result = (String)invoke.invokeFunction("createSecurityData", enc,mod,pass,md5p);    
	    	 }else {
	    		 System.out.println("read file error");
	    	 }
	    	 reader.close();  
	    	 reader2.close();  
	    	 reader3.close();  
	    	 return result;
	     }catch(Exception e) {
	    	 e.printStackTrace();
	    	 return null;
	     }
	}

js文件的路径位置:

SecuritUtil.js文件的内容如下:

function createSecurityData(e,m,pwd,md5v){
	var random=getRandomString(10);
	var key=RSAUtils.getKeyPair(e,'',m);
	var envilope=md5v+'!,!'+random+'!,!'+pwd;
	return RSAUtils.encryptedString(key,envilope)
}

getRandomString()这个函数在RandomUtil.js文件中,代码如下:

	function getRandomString(len) {
		len = len || 32;
		var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
		var maxPos = chars.length;
		var pwd = '';
		for (var i = 0; i <= len - 1; i++) {
			pwd += chars.charAt(Math.floor(Math.random() * maxPos));
		}
		return pwd;
	}

执行java方法,得到js的返回值。

转载于:https://my.oschina.net/u/161393/blog/1835599

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值