我正在使用已签名的applet添加新的提供程序。 如果小程序已签名,则此类代码被视为可信任。
在私人方法中:
private Provider addProvider() throws Exception {
logger.log(Level.INFO, "addProvider ... ");
Provider p = new sun.security.pkcs11.SunPKCS11(
new ByteArrayInputStream(config.getBytes())
);
//Security.addProvider(p);
return p;
}
config
是一个包含PKCS11名称和库的字符串。
当我使用netbeans进行调试时,applet完美运行并添加了新的提供程序,但是当我在html文件中执行applet时,applet未初始化。如果我取消注释添加提供程序的下一行,则初始化html中的applet。
private Provider addProvider() throws Exception {
logger.log(Level.INFO, "addProvider ... ");
//Provider p = new sun.security.pkcs11.SunPKCS11(
// new ByteArrayInputStream(config.getBytes())
// );
// Security.addProvider(p);
return p;
}
然后添加提供程序时出现问题。
只有这一行会导致applet未初始化:
Provider p = new sun.security.pkcs11.SunPKCS11(
new ByteArrayInputStream(config.getBytes())
);
我已插入try {}
private Provider addProvider() throws Exception {
logger.log(Level.INFO, "addProvider ... ");
try{
Provider p = new sun.security.pkcs11.SunPKCS11(
new ByteArrayInputStream(config.getBytes())
);
Security.addProvider(p);
} catch (Exception ex) {
logger.log(Level.SEVERE, "Excepcion provider: {0}", ex);
}
return p;
}
但是就像applet没有被初始化一样,我没有得到任何异常 有什么建议吗?
感谢Andrew的评论。
我已添加您的建议,现在我收到了错误消息:
try{
provider = new sun.security.pkcs11.SunPKCS11(
new ByteArrayInputStream(config.getBytes())
);
Security.addProvider(provider);
} catch (Throwable t) {
logger.log(Level.SEVERE, "Excepcion provider:", t);
logger.log(Level.SEVERE, "Throwable.Cause: ", t.getCause());
}
日志显示:
Excepcion provider:
<message>java.lang.ExceptionInInitializerError</message>
Throwable.Cause:java.security.AccessControlException:access denied(java.lang.RuntimePermission accessClassInPackage.sun.security.util)