首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从浏览器小程序使用JDBC时出现“访问被拒绝”

从浏览器小程序使用JDBC时出现“访问被拒绝”
EN

Stack Overflow用户
提问于 2011-09-07 01:18:55
回答 2查看 1.5K关注 0票数 0

我有一个在Oracle数据库中查询数据的java applet。当从IDE内部运行时,它运行得很好。但是当我将它作为嵌入在网页中的applet运行时,我在类加载器中得到了一个“访问被拒绝”的错误,并且我完全不知道它对我的要求是什么:

代码语言:javascript
复制
Sep 06, 2011 12:58:48 PM oracle.jdbc.driver.OracleDriver registerMBeans
WARNING: Error while registering Oracle JDBC Diagnosability MBean.
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader")
                at java.security.AccessControlContext.checkPermission(Unknown Source)
                at java.security.AccessController.checkPermission(Unknown Source)
                at java.lang.SecurityManager.checkPermission(Unknown Source)
                at java.lang.Thread.getContextClassLoader(Unknown Source)
                at oracle.jdbc.driver.ClassRef.<init>(ClassRef.java:75)
                at oracle.jdbc.driver.ClassRef.newInstance(ClassRef.java:51)
                at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:311)
                at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:199)
                at java.security.AccessController.doPrivileged(Native Method)
                at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:195)
                at java.lang.Class.forName0(Native Method)
                at java.lang.Class.forName(Unknown Source)
                at com.binderton.oracle.ConnectionManager.open(ConnectionManager.java:17)
                at com.sun.javafx.applet.FXApplet2$2.run(Unknown Source)
                at com.sun.javafx.application.PlatformImpl$3.run(Unknown Source)
                at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
                at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
                at com.sun.glass.ui.win.WinApplication$1$1.run(Unknown Source)
                at java.lang.Thread.run(Unknown Source)
java.lang.ExceptionInInitializerError
                at java.lang.Class.forName0(Native Method)
                at java.lang.Class.forName(Unknown Source)
                at com.binderton.oracle.ConnectionManager.open(ConnectionManager.java:17)
                at com.sun.javafx.applet.FXApplet2$2.run(Unknown Source)
                at com.sun.javafx.application.PlatformImpl$3.run(Unknown Source)
                at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
                at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
                at com.sun.glass.ui.win.WinApplication$1$1.run(Unknown Source)
                at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" getClassLoader")
                at java.security.AccessControlContext.checkPermission(Unknown Source)
                at java.security.AccessController.checkPermission(Unknown Source)
                at java.lang.SecurityManager.checkPermission(Unknown Source)
                at java.lang.Thread.getContextClassLoader(Unknown Source)
                at oracle.jdbc.driver.ClassRef.<init>(ClassRef.java:75)
                at oracle.jdbc.driver.ClassRef.newInstance(ClassRef.java:51)
                at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:260)
                ... 12 more
Got ErrorEvent[url=null label=Failed to start application. cause=null
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-07 01:23:55

小程序在具有非常严格的安全规则的环境中运行。你至少需要sign你的小程序。

但是,这里的问题更大,在applet中使用JDBC是一个非常糟糕的想法。小程序的源代码是公开的,因此对容易的黑客攻击很敏感。您真的应该为此创建一个let服务,然后让您的applet访问该let服务。使用the服务,您的小程序将能够仅通过HTTP请求/响应与数据库交换信息。使用webservice,您可以对公众隐藏数据库访问详细信息、JDBC和SQL代码。

如何准确地创建used服务取决于服务器环境和使用的编程语言。例如,在Java中,您已经可以使用一个简单的Servlet来实现这一点,但restful ( XML /JSON)和XML webservices也分别支持JAX-RS和JAX-WS。小程序没有任何安全限制,可以连接到其地址可通过getCodeBase()获得的主机。

代码语言:javascript
复制
InputStream response = new URL(getCodeBase(), "servlet?foo=bar").openStream();
// ...
票数 5
EN

Stack Overflow用户

发布于 2011-09-07 02:29:25

请注意,如果你听从了BalusC的建议,将数据库隐藏在一个活动页面(如servlet,PHP,ASP等)后面。与applet在同一台服务器上,applet很可能仍处于沙箱状态。它将是试图访问类加载器(以及DB)的活动页面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7323650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档