在IE中使用applet间歇性'访问被拒绝''accessClassInPackage.sun.plugin.javascript'错误

时间:2011-12-01 06:55:30

标签: java security applet

我有一个小程序,需要执行priveledges并与javascript通信。它已签署。

最近,一些用户(总共2000人)在早上启动IE时遇到了问题。小程序无法启动。关闭并重新打开浏览器通常可以解决问题并且applet可以正常工作。

我启用了applet跟踪并在控制台中获得了以下内容:(抱歉德语,但关键条目是英文)

Java Plug-in 1.6.0_23
Verwendung der JRE-Version 1.6.0_23-b05 Java HotSpot(TM) Client VM
Home-Verzeichnis des Benutzers = C:\Documents and Settings\user
.....
network: Cache-Eintrag gefunden [url: http://{sharepointportal}/_layouts/WebParts2010/ieLauncher.jar?version=2011120106, Version: null] prevalidated=false/0
cache:  Read manifest for http://{sharepointportal}/_layouts/WebParts2010/ieLauncher.jar?version=2011120106: read=400 full=400
cache: Reading Signers from 1121 http://{sharepointportal}/_layouts/WebParts2010/ieLauncher.jar?version=2011120106 | C:\Documents and Settings\user\Application Data\Sun\Java\Deployment\cache\6.0\63\a69c47f-2eba4659.idx
security: Zertifizierungsstellen-Stammzertifikate wurden geladen aus C:\PROGRA~2\Java\jre6\lib\security\cacerts
security: Bereitstellungszertifikate werden geladen aus C:\Documents and Settings\user\Application Data\Sun\Java\Deployment\security\trusted.certs
security: Bereitstellungszertifikate wurden geladen aus C:\Documents and Settings\user\Application Data\Sun\Java\Deployment\security\trusted.certs
security: Zertifikate werden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate wurden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate werden aus Internet Explorer ROOT-Zertifikatspeicher geladen
security: Zertifikate wurden aus Internet Explorer ROOT-Zertifikatspeicher geladen
security: Zertifikate werden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
security: Zertifikate wurden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
security: Zertifikatskette mithilfe von CertPath-API prüfen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Keine Zeitstempelinformationen verfügbar
security: Zuständigkeitslistendatei gefunden
security: Beginn der Überprüfung auf vertrauenswürdige Erweiterung für dieses Zertifikat
security: Beginn des Vergleichs der Zuständigkeitsliste mit diesem Zertifikat
security: CRL-Unterstützung ist deaktiviert.
security: OCSP-Unterstützung ist deaktiviert.
security: Diese End Entity-Überprüfung mit OCSP ist deaktiviert.
security: Prüfen, ob Zertifikat im Zertifikatsspeicher Deployment denied ist
security: Zertifikat wird im permanenten Bereitstellungszertifikatspeicher gesucht
security: Zertifikate werden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate wurden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate werden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
security: Zertifikate wurden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
security: Zertifikatskette mithilfe von CertPath-API prüfen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Keine Zeitstempelinformationen verfügbar
security: Zuständigkeitslistendatei gefunden
security: Beginn der Überprüfung auf vertrauenswürdige Erweiterung für dieses Zertifikat
security: Beginn des Vergleichs der Zuständigkeitsliste mit diesem Zertifikat
security: CRL-Unterstützung ist deaktiviert.
security: OCSP-Unterstützung ist deaktiviert.
security: Diese End Entity-Überprüfung mit OCSP ist deaktiviert.
security: Prüfen, ob Zertifikat im Zertifikatsspeicher Deployment denied ist
security: Zertifikat wird im permanenten Bereitstellungszertifikatspeicher gesucht
security: Zertifikate werden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate wurden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate werden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
security: Zertifikate wurden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
security: Zertifikatskette mithilfe von CertPath-API prüfen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Keine Zeitstempelinformationen verfügbar
security: Zuständigkeitslistendatei gefunden
security: Beginn der Überprüfung auf vertrauenswürdige Erweiterung für dieses Zertifikat
security: Beginn des Vergleichs der Zuständigkeitsliste mit diesem Zertifikat
security: CRL-Unterstützung ist deaktiviert.
security: OCSP-Unterstützung ist deaktiviert.
security: Diese End Entity-Überprüfung mit OCSP ist deaktiviert.
security: Prüfen, ob Zertifikat im Zertifikatsspeicher Deployment denied ist
security: Zertifikat wird im permanenten Bereitstellungszertifikatspeicher gesucht
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.plugin.javascript)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPackageAccess(Unknown Source)
    at sun.applet.AppletSecurity.checkPackageAccess(Unknown Source)
    at java.lang.ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.lang.ClassLoader.checkPackageAccess(Unknown Source)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
basic: Ausnahme: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.plugin.javascript)
Ignored exception: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.plugin.javascript)
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.plugin.javascript)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPackageAccess(Unknown Source)
    at sun.applet.AppletSecurity.checkPackageAccess(Unknown Source)
    at java.lang.ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.lang.ClassLoader.checkPackageAccess(Unknown Source)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
basic: Ausnahme: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.plugin.javascript)
Ignored exception: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.plugin.javascript)

如果我错了,请纠正我,但是,由于重新启动浏览器解决了问题,因此它不能成为证书或priveledge问题。正确?

有没有人知道它可能是什么或我还能做些什么来获取更多信息?

由于

更新

applet html

<APPLET ID='Launcher' 
    CODE='package.PortalLauncher.class' 
    ARCHIVE='ieLauncher.jar?version=2011120108'
    CODEBASE='../../../_layouts/WebParts2010/' 
    WIDTH='0' HEIGHT='0'>
    <div style='border: 1px red dotted; margin:10px;'>
        Dieser Webbrowser unterstützt das APPLET-Tag nicht!<br/>
        This browser does not support the APPLET tag!<br/>
    </div></APPLET>

UPDATE2

applet可以直接从浏览器启动应用程序。链接onclick事件使用应用程序URL调用applet。允许applet启动可执行文件。它位于公司门户网站上,可直接访问当前用户可以使用的所有应用程序。

因此它是一个javascript to java链接。

UPDATE3

我更改为从APPLET到OBJECT的标记,并添加了MAYSCRIPT,SCRIPTABLE等(参见建议)并开始测试。我有想法在浏览器的“起始页”列表中添加第二页。许多用户自动启动IBM Host on Demand,所以我想我也会尝试一下。那是问题开始的时候。每次启动浏览器2-3次,我的applet出现问题。看一下这条痕迹,让我感到震惊的是,当小程序启动时,我会在跟踪中得到以下内容:

security: Prüfen, ob Zertifikat im Zertifikatsspeicher Deployment denied ist
security: Zertifikat wird im permanenten Bereitstellungszertifikatspeicher gesucht
security: Zertifikate werden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate wurden aus Bereitstellungssitzungs-Zertifikatspeicher geladen
security: Zertifikate werden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
basic: Applet geladen
security: Zertifikate wurden aus Internet Explorer TrustedPublisher-Zertifikatspeicher geladen
security: Zertifikatskette mithilfe von CertPath-API prüfen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Zertifikatssammlung aus ZA-Stamm-Zertifikatsspeicher abrufen
security: Keine Zeitstempelinformationen verfügbar
security: Zuständigkeitslistendatei gefunden
security: Beginn der Überprüfung auf vertrauenswürdige Erweiterung für dieses Zertifikat
security: Beginn des Vergleichs der Zuständigkeitsliste mit diesem Zertifikat
security: CRL-Unterstützung ist deaktiviert.
security: OCSP-Unterstützung ist deaktiviert.
security: Diese End Entity-Überprüfung mit OCSP ist deaktiviert.
security: Prüfen, ob Zertifikat im Zertifikatsspeicher Deployment denied ist
security: Zertifikat wird im permanenten Bereitstellungszertifikatspeicher gesucht
basic: Applet geladen

当applet加载失败时,我得到:

security: Zertifikat wird im permanenten Bereitstellungszertifikatspeicher gesucht
basic: Applet geladen

这说的是正在寻找证书。当它工作时,显示成功消息。当它失败时,没有任何进一步的追踪。即可能找不到证书。当我刷新页面时,它就成功了。

想法?

2 个答案:

答案 0 :(得分:2)

我无法确定,但我想与您分享我的想法。从外页调用javascript的小程序必须标记为“MAYSCRIPT”。 我认为如果applet未标记为MAYSCRIPT,则会抛出此异常。尝试检查一下:创建静态HTML页面,将applet添加到此页面而不使用MAYSCRIPT属性。如果您遇到相同的例外,请继续执行后续步骤。

我的理论是,您的HTML页面会动态创建包含applet标记的代码。因此,有时applet可能会在之前启动,浏览器会识别出此applet可以调用javascript。这就是刷新经常解决问题的原因。

因此,如果所有这些都正确,请尝试修改HTML页面,以便applet仅在浏览器读取了标记applet的所有属性时启动。可能使动态代码静态或服务器生成。

如果我的理论完全错误,我很抱歉。多年来我一直没有实现applet。

答案 1 :(得分:2)

我怀疑AlexR已找出问题的原因,但还有一些额外的评论。

CODE='package.PortalLauncher.class' 

应该是..

CODE='package.PortalLauncher' 

这就是..

WIDTH='0' HEIGHT='0'>

..是可疑的('隐藏小程序'),可能会导致applet被过度保护的安全插件完全删除。

最好将大小设置为20x20,并通过样式(CSS)隐藏小程序。

确保验证HTML。


我无法解释问题的间歇性,但这是适合您的小程序。


更新

  

当我将样式设置为'display:none'时,似乎不再加载applet。

display: none

上的W3C
  

..请注意,'无'的显示会创建一个不可见的框;它会创建 no box。

强调我的。所以这对我来说并不奇怪。 ;)

OTOH,我实际上的意思是visibility: hidden

  

生成的框是不可见的(完全透明,没有绘制任何内容)..

在页面底部放置一个浅的宽applet元素,几乎不会被注意到。

您可能会调查以使applet消失的其他事项:

  • 让applet成为变色龙,接受颜色并用该颜色绘制整个GUI。这仅在网页具有恒定颜色BG(例如,没有BG图像悬停在其上)时才有效。
  • 再次使用样式,使用负坐标的绝对位置将applet元素的位置移离可见页面。这是我刚才听到的建议。我还没试过。