GWTAI小程序集成中的GWT问题

Posted

技术标签:

【中文标题】GWTAI小程序集成中的GWT问题【英文标题】:GWTAI applet integration in GWT problem 【发布时间】:2010-05-28 19:23:39 【问题描述】:

我正在与gwtai 合作将Java 小程序集成到我的gwt - 项目中。从我的主应用程序到小程序的基本通信(例如调用返回 int 或 boolean 值的简单方法)有效。

但我需要集成这个小程序的主要原因是,我需要它连接到另一台服务器并接收答案并将其传递给我的 gwt 应用程序。

所以小程序中有一个基本的方法:

public String SendAndReceive(String host, int sendPort, int receivePort, String query)

连接到服务器,接收答案并将该答案作为字符串返回。

当我现在尝试像这样调用此方法时:

applet.SendAndReceive("0.0.0.0", 9099, 2000, "show streams;");

我经常遇到以下错误(最后有完整的错误消息):

com.google.gwt.core.client.javascriptException: (String): Error calling method on NPObject! [plugin exception: java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)]

我找不到解决方案(因为 gwtai 是一个非常罕见的主题),我发现(以及我们假设的异常)存在安全问题 - 可能是因为我正在连接到另一台服务器.我还阅读了一些关于浏览器的单一来源政策的内容,指向同一方向的内容...到目前为止,我从未使用过 java 小程序。

因此,如果有人有解决方案或提示,我将非常感激。如果更多代码有帮助,我可以提供。

谢谢,

安迪


完整的错误信息:

21:03:49.864 [ERROR] [follovizergwt] 无法加载模块入口点类 follovizer.gwt.client.FolloVizerGWT(有关详细信息,请参阅相关异常) com.google.gwt.core.client.JavaScriptException:(字符串):在 NPObject 上调用方法时出错! [插件异常:java.security.AccessControlException:访问被拒绝(java.util.PropertyPermission * 读,写)]。 在 com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:195) 在 com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120) 在 com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507) 在 com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264) 在 com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 在 follovizer.gwt.client.AnduINAppletImpl.SendAndReceive(AnduINAppletImpl.java) 在 follovizer.gwt.client.FolloVizerGWT.createLayout(FolloVizerGWT.java:92) 在 follovizer.gwt.client.FolloVizerGWT.onModuleLoad(FolloVizerGWT.java:40) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:369) 在 com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:185) 在 com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:380) 在 com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222) 在 java.lang.Thread.run(Thread.java:619)

【问题讨论】:

【参考方案1】:

与其他浏览器插件一样,Java Applet 具有security restrictions。值得注意的是,他们只能与他们来自的主机建立网络连接。您不能使用小程序连接到任意服务器。

与其他服务器通信是一个相当普遍的要求,有几种方法可以绕过它。常见的解决方案是 Flash + Crossdomain.xml 和 JSONP。还有其他解决方案,只需在 Google 上搜索所有可能的解决方案即可。

【讨论】:

【参考方案2】:

如果您的 Java 小程序需要进行跨域请求,则需要对其进行签名。默认情况下,Java 沙箱不允许小程序获取与小程序起源不同的域中的页面。

【讨论】:

以上是关于GWTAI小程序集成中的GWT问题的主要内容,如果未能解决你的问题,请参考以下文章

GWT Spring 安全集成(纯 GWT,无 JSP)

GWT 2.4 与 Spring 的集成

无法将 GWT 与 Spring RestTemplate 实现集成

如何集成 GWT-RPC、Android 和 GAE?

IE 在 GWT 中错误地显示一些小部件

融云im小程序集成初体验