Создан Java-апплет... Среда разработки "SpringSource Tool Suite Version: 2.6.1.RELEASE". Java version "1.6.0_22". В среде разработки апплет отлично отрабатывает... Что главное в нем... Он вызывает на выполнение метод setData WebService... WebService находится на отдельном Linux сервере... Данный метод производит изменение атрибута приложения InfoSphere. Как только апплет запускаю не из среды, апплет отображается в браузере, но в методе апплета, где происходит обращение к WebService вылетает ошибка. Про FAQ http://base.vingrad.ru/view/112-Podpisi-v-apletah---kak-eto-delaetsya- читал. Да и другие статьи тоже... http://www.javable.com/columns/crypto/workshop/01/ch1/?print... Но невыходит каменный цветок у Данилы-мастера... Метод в апплете, где происходит вызов WebService
| Цитата | private void extracted(String arg0, String arg1, String arg2, String arg3) { try { // First create the connection SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory .newInstance(); SOAPConnection connection = soapConnFactory.createConnection();
// Next, create the actual message MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage message = messageFactory.createMessage();
// Create objects for the message parts SOAPPart soapPart = message.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody body = envelope.getBody();
// Populate the body // Create the main element and namespace SOAPElement bodyElement = body.addChildElement(envelope.createName( "setData", "nsi", "http://nsi.asur.mos.ru/")); // // Add content bodyElement.addChildElement("arg0").addTextNode(arg0); bodyElement.addChildElement("arg1").addTextNode(arg1); bodyElement.addChildElement("arg2").addTextNode(arg2); bodyElement.addChildElement("arg3").addTextNode(arg3);
//System.getSecurityManager().checkAccept("192.168.11.120", 7507); // Save the message message.saveChanges();
// Check the input System.out.println("\nREQUEST:\n"); message.writeTo(System.out); // Send the message and get a reply
// Set the destination String destination = "http://192.168.11.120:7507/nsidataset/SetDataSrvc"; // Send the message SOAPMessage reply = connection.call(message, destination); // Check the output System.out.println("\nRESPONSE:\n"); // Create the transformer TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); // Extract the content of the reply Source sourceContent = reply.getSOAPPart().getContent(); // Set the output for the transformation StreamResult result = new StreamResult(System.out); System.out.println("\n"); transformer.transform(sourceContent, result);
System.out.println(); // Close the connection connection.close(); } catch (Exception e) { String s = ""; for (StackTraceElement iterable_element : e.getStackTrace()) { s += iterable_element.getClassName() + "." + iterable_element.getMethodName() + "." + iterable_element.getLineNumber() + "\n"; } e.printStackTrace(); generatredSignatureTextField.setText(e.getMessage() + " \n " + s); } }
|
Место ошибки
| Цитата | | SOAPMessage reply = connection.call(message, destination); |
И так, что сделал для создания доверенного апплета: 1. Создание JAR-архива
| Цитата | | jar cvf AppletNew.jar AppletNew |
2. Создал в keystore свой персональный сертификат...
| Цитата | | keytool -genkey -alias signEDS -keystore compstore -keypass <....> -storepass <....> -dname "CN=EDS, OU=JavaSoft, O=<....>, L=<....>, S=<....>, C=RU" |
3. Подписал апплет созданным сертификатом...
| Цитата | | jarsigner -keystore compstore -storepass <....> -keypass <....> -signedjar SAppletNew.jar AppletNew.jar signEDS |
Файлы в каталоге META-INF: MANIFEST.MF, SIGNEDS.DSA, SIGNEDS.SF имеются... 4. Перекинул файлы: SAppletNew.jar - подписанный апплет; compstore - созданное хранилище сертификатов. в другой каталог (E:\1\) для тестирования апплета. В этом каталоге создал HTML-файл вызова апплета
| Цитата | <html> <body> <applet code="AppletNew/AppletNew.class" ARCHIVE="SAppletNew.jar" width=400 height=400> <PARAM name="xml" value="Это XML-файл"> <PARAM name="name_catalog" value="Базовый регистр"> <PARAM name="id_item" value="citizenshipType"> </applet> </body> </html>
|
5. В файле "C:\Program Files\Java\jre6\lib\security\java.policy" добавил:
| Цитата | keystore "file:E:\1\compstore"; grant { permission java.net.SocketPermission "192.168.11.120:7507", "accept"; permission java.net.SocketPermission "192.168.11.120:7507", "connect"; permission java.net.SocketPermission "192.168.11.120:7507", "listen"; };
|
для того чтобы указать в политике безопасности, что мы можем доверять апплету и разрешить обращение по URL...
Ну и теперь запускаю апплет в браузере... Апплет отображается... Формируется подпись, как и положено, НО при отсылании подписи на WebService вылетает ошибка... (Запрещено) Сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе со стороны клиента к указанному ресурсу. Чего нехватает ? А скорее всего политики безопасности... Но что еще нужно указать? |