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

原创
2018/06/26 12:39
阅读数 909

框架: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的返回值。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部