我想在我的 GWT 项目(客户端)中使用外部加密库。(特别是斯坦福 Javascript 加密库,http ://crypto.stanford.edu/sjcl/ 我在项目的 gwt 配置文件(MyProj.gwt.xml)中添加了这些行
<script src="libs/sjcl/sjcl.js" />
<script src="libs/sjcl/core/sha256.js" />
并在我的安全类中创建了一个新方法:
public static native String sha256(String ptext)
/*-{
return sjcl.hash.sha256.hash(ptext);
}-*/;
但是当我调用它时
String result = Security.sha256("password");
我收到一个错误(“未定义 sjcl”)
如果知道这些问题和 javasript 的人可以阅读该库并告诉我正确的方法,我将节省大量时间和精力 - 无需挖掘可怕的 JavaScript。
升级版:
我首先想到的是,外部库必须在 /war 目录中其次,如果我将以下内容添加到 gwt.xml 文件中,我无法让 GWT 导入 *.js 文件
<script src="libs/sjcl/sjcl.js"></script>
<script src="libs/sjcl/core/sha256.js"></script>
我不得不在入口点的 html 源代码中添加类似的行
<script src="/sjcl/sjcl.js"></script>
<script src="/sjcl/core/sha256.js"></script>
这样导入就可以了,我可以用 Chrome Inspector 检查它
我尝试使用另一个库,没有 sjcl 那么复杂,而且效果很好。所以,显然,我没有正确使用 sjcl。另一个库更简单,只是纯方法,sjcl 使用类和东西,但由于我根本不懂 JS,如果不深入研究 JS 语法,我无法弄清楚如何正确调用这些东西。我真的很想跳过这部分。
任何人都可以查看 sjcl 代码并告诉我如何正确调用该方法吗?源码真的很小,我觉得JS pro一看就知道。
UPD 2:原来在gwt.xml中加入下面的代码就够了,只要把library放到/war中,注意路径中前面的“/”。如果你不把它放在那里,GWT 将在模块目录中为你寻找 lib
UPD 3:不要忘记清除浏览器的缓存,否则“未找到”错误不会消失