当我试图在jsp上运行applet时AccessControlException

时间:2012-02-15 14:02:17

标签: java security jsp jdbc applet

我正在运行我的jsp页面时出现异常,其中我嵌入了applet

我的jsp文件代码

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
     <body>
      <applet code="myform.applet" archive="applet.jar,ojdbc14.jar" width="600" height="480"/>
    </body>
</html>

applet.jar 我已经创建了一个类,我正在尝试从oracle数据库表中检索数据库值。

和异常通过

Exception in thread "thread applet-myform.applet-1" java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at myform.applet.init(applet.java:28)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.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.ClassLoader.getSystemClassLoader(Unknown Source)
    at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:316)
    ... 5 more

我到处搜索,但没有得到我的解决方案,而且它已经以广泛的方式解释了,我无法理解为新手。请帮助我,自从过去两天以来我一直坚持这个问题。提前致谢。

1 个答案:

答案 0 :(得分:1)

Applet在安全的环境中运行。 SecurityManager控制applet正在执行的操作,并且不允许它执行禁止的操作。

从堆栈跟踪中我们可以看到Oracle驱动程序试图访问禁止applet的系统类加载器。

通常有3种方法可以解决这个问题。

  1. 签署您的小程序。在这种情况下,您将能够做到一切。不过要小心。下一个问题是,由于客户端浏览器和运行Oracle的服务器之间的防火墙,驱动程序将无法连接到数据库。
  2. 将您的客户端开发为常规应用程序并使用Java Web start启动它。用户仍然可以通过单击其Web浏览器中的链接来启动应用程序,但他将获得功能完备的应用程序(与签名的applet完全相同)。防火墙问题仍然与此相关。
  3. 创建3层应用程序。前端可以是applet或瘦客户端。业务逻辑可以是简单的Web应用程序,它公开RESTful API并连接到DB以检索和存储数据。