У меня есть часть «доказательства концепции», которая пересекает какую-то незнакомую территорию.
Передо мной стоит задача подключить компьютер EFTPOS к приложению, работающему в качестве апплета в браузере в нашей внутренней сети.
На данный момент я проигнорировал dll EFTPOS и создал простую DLL-библиотеку, украшенную JNI, на моем языке выбора (Delphi), которая просто записывает строку в текстовый файл в c: \, и я могу успешно вызвать ее из локального Java-приложение.
Однако, когда я создаю апплет, чтобы сделать то же самое, компилирую его в .JAR, подписываю JAR и пытаюсь вызвать метод в апплете через Javascript на веб-странице, где происходит сбой.
Старший Java-парень, с которым я работаю, не думает, что это можно будет заставить работать, потому что это по своей природе "зло" - позволить апплету делать это.
Существует запись, которую вы можете поместить в файл java.policy, чтобы разрешить загрузку библиотеки. а также allPermission & я перепробовал целый ряд вариантов по всем этим направлениям, но все безрезультатно, приведя следующую трассировку ошибок в консоли Java:
java.lang.ExceptionInInitializerError
at app.TestApplet.LogAString(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin.com.MethodDispatcher.invoke(Unknown Source)
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.DLoggerImpl)
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.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at app.DLogger.<clinit>(Unknown Source)
... 16 more
java.lang.Exception: java.lang.ExceptionInInitializerError
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
Кажется, что ключевая строка «Вызвана: java.security.AccessControlException: доступ запрещен (java.lang.RuntimePermission loadLibrary.DLoggerImpl)», что подразумевает проблему с разрешениями. Возможно, я неправильно понял файл политики - или неправильно подписал - или что-то в этом роде, или это может быть связано с тем, что Java жестко запрограммирована, чтобы не разрешать такого рода разрешения для апплета из-за угрозы безопасности.
Мой вопрос: я трачу свое время? Можно ли это сделать, и если да, то как?
Спасибо в ожидании
Mike