gpt4 book ai didi

java - 从浏览器小程序使用 JDBC 时为 "access denied"

转载 作者:行者123 更新时间:2023-12-01 16:37:52 32 4
gpt4 key购买 nike

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

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

最佳答案

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

但是,这里的问题更大,在小程序中执行 JDBC 是一个非常糟糕的主意。该小程序的源代码是公开的,因此很容易被黑客攻击。您确实应该为此创建一个 Web 服务,然后让您的小程序访问该 Web 服务。通过 Web 服务,您的小程序将能够仅通过 HTTP 请求/响应与数据库交换信息。通过 Web 服务,您可以向公众隐藏数据库访问详细信息、JDBC 和 SQL 代码。

具体如何创建Web服务取决于服务器环境和所使用的编程语言。例如,在 Java EE 中,您已经可以使用一个简单的 Servlet 来实现此目的,而且 JAX-RS 和 JAX-WS 也分别支持静态 (XML/JSON) 和 XML Web 服务。小程序不受任何安全限制,可以与地址为 getCodeBase() 的主机连接。例如

InputStream response = new URL(getCodeBase(), "servlet?foo=bar").openStream();
// ...

关于java - 从浏览器小程序使用 JDBC 时为 "access denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7323650/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com