我有一个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
小程序在具有严格限制的安全规则的环境中运行。您至少需要在小程序上签名。
但是,这里的问题更大,在小程序内执行JDBC是一个非常糟糕的主意。该applet的源代码是公开可用的,因此很容易被黑客入侵。您实际上应该为此创建一个Web服务,然后让您的小程序访问该Web服务。使用Web服务,您的小程序将仅通过HTTP请求/响应就可以与数据库交换信息。使用Web服务时,您可以对公众隐藏数据库访问详细信息,JDBC和SQL代码。
如何精确地创建Web服务取决于服务器环境和所使用的编程语言。例如,在Java EE中,您已经为此使用了一个简单的Servlet,但是分别针对静态(XML / JSON)和XML Web服务分别支持JAX-RS和JAX- WS。小程序没有任何安全限制,可以与其地址可通过getCodeBase()例如Eg 访问的主机连接
getCodeBase()
InputStream response = new URL(getCodeBase(), "servlet?foo=bar").openStream(); // ...