Добавление провайдера в подписанный апплет - PullRequest
0 голосов
/ 03 декабря 2011

Я работаю с подписанным апплетом, который добавляет нового провайдера.Если апплет подписан, такой код считается доверенным.

В частном методе:

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, апплет работает отлично, и добавляется новый поставщик, но когда я выполняю апплет в html-файле, апплет не инициализируется.И если я раскомментирую следующие строки, в которые добавлен поставщик, инициализируется апплет в html.

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;
}

Тогда возникает проблема с добавлением поставщика.

Только эта строка приводит к тому, чтоапплет не инициализирован:

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;
}

Но, как апплет не инициализирован, я не получаю никаких исключений. Любое предложение?

Спасибо Эндрю за ваш комментарий.

Я добавил ваше предложение, и теперь я получаю сообщение об ошибке:

            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поставщик:

<message>java.lang.ExceptionInInitializerError</message>

Throwable.Cause: java.security.AccessControlException: доступ запрещен (java.lang.RuntimePermission accessClassInPackage.sun.security.util)

...