Son 6 ayda bir proje üzerinde çalışıyorum. Bu proje için bir web servisinin konuşlandırıldığı bir glassfish sunucu örneğim var. İstemci tarafında, BASIC kimlik doğrulaması ile REST ile Jersey (XML istekleri/yanıtları, JSON yok) taleplerini yerine getiren JavaFX2.2 kullanıyorum. Kimlik doğrulaması gerekli pencere 7u21 güncellemesinden sonra açılır.
Kullanıcı programı (JWS/JNLP) başlattığında, normalde kendi giriş bilgilerini girilen bir giriş penceresinde girer, oturum açma düğmesine basıp çalışmaya başlar. Ancak 7u21'den beri, bazı nedenlerden dolayı (muhtemelen 7u21'de değiştirilen güvenlik nedeniyle) ekstra bir Java "Kimlik Doğrulama Gerekli" pop-up'ım var.
Java sürümleri arasındaki uyumluluk sorunları ile ilgisi yoktu emin olmak gerekirse, ben bu yüzden, 7u21 yanı sunucuyu güncelleme:
- Müşteri: 7u17 güncellenen java 7u21 için
- Sunucu: Ben düğmesi i iptal vurursanız 7u21 için 7u09 güncellenen java, düzeltilmiş glassfish asenv.bat dosyası yeni jdk
kullanmak n "kimlik doğrulaması gerekli" penceresi programı binlik başlatmak yapar Yukarıda gösterilen ancak istekleri yaparken kararlı çalışmaz: GET yöntemi kullanılırken
java.io.IOException: stream is closed
file:/D:/NetBeansProjects/MIT_20130516/CL_KenoM/dist/CL_KenoM.jar!/GUI/cow/ListCow.fxml
at com.sun.jersey.api.client.ClientResponse.close(ClientResponse.java:615)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:570)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:535)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:696)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:512)
at DA.CowsClient.getCowsByUserId(CowsClient.java:96)
at GUI.cow.ListCowController.initialize(ListCowController.java:728)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2152)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2744)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2723)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2709)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2696)
at Classes.Context.showContentPane(Context.java:186)
at GUI.user.ListUserController.openAddData(ListUserController.java:389)
at GUI.user.ListUserController.access$100(ListUserController.java:55)
at GUI.user.ListUserController$8.handle(ListUserController.java:657)
at GUI.user.ListUserController$8.handle(ListUserController.java:652)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3117)
at javafx.scene.Scene$ClickGenerator.access$8600(Scene.java:3055)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3337)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3168)
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3123)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1563)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2265)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
at com.sun.glass.ui.View.handleMouseEvent(View.java:528)
at com.sun.glass.ui.View.notifyMouse(View.java:922)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
at java.lang.Thread.run(Unknown Source)
com.sun.jersey.api.client.ClientHandlerException: java.io.IOException: stream is closed
Bu hata rasgele oluşan (PUT ile test etmedim ya SİL), bu durumda getCowsByUserId() yöntemi vardı:
public List<Cows> getCowsByUserId(int id) throws UniformInterfaceException {
WebResource resource = webResource;
resource = resource.path(java.text.MessageFormat.format("cows/user/{0}", String.valueOf(id))); //this is line 96
List<Cows> list = resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(new GenericType<List<Cows>>() { });
return list;
}
Ben NetBeans üzerinden veya yerine .jnlp ait .jar dosyası ile programı başlattığınızda komik kısmı amaçlandığı gibi her şey çalışıyor, (no ekstra kimlik doğrulama pop-up'ları, hata yok) ... bu yüzden Java Web başlatıcısı ile bir şeyler yapmak zorundayım sanırım?
DÜZENLEME 28 May 2013:
Ben 7u17 ve 7u21 gelen java konsol izleme/ayıklama günlükleri karşılaştırarak biraz daha araştırma yaptım.
security: Trust for: http://<url>/lib/jersey-core-1.17.jar has ended: Thu Jan 01 01:00:00 CET 1970
security: Validate the certificate chain using CertPath API
security: SHA-256 finger print: <bunch of chars>
security: The certificate hasnt been expired, no need to check timestamping info
security: The CRL support is disabled
security: The OCSP support is disabled
security: This OCSP End Entity validation is disabled
security: Start comparing to jurisdiction list with this certificate
basic: Plugin2ClassLoader.getPermissions CeilingPolicy allPerms
security: JAVAWS AppPolicy Permission requested for: http://<url>/lib/jersey-core-1.17.jar
7u17 günlüğünde görünmüyor ilk satırı, bu kavanoz imzalanması ile bir şeyler yapmak zorunda böylece: Ben 7u21 günlüğüne aşağıdaki fark? Aynı şey birden fazla kavanoz dosyaları için gösterir. Projeyi oluştururken, her şey kendi anahtar teslimi ile imzalanır, bu büyük sorun mu? Bu, JNLP'nin yalnızca güvenilir bir CA tarafından yaratılan bir sertifika ile imzalanmışsa (ki bu ücretsiz değildir) makul bir şekilde çalışacağı anlamına mı geliyor?
DÜZENLEME 4 Haziran 2013:
Ben, GlobalSign dan kendime kod imzalama sertifikası satın benim makineye üzerine kurulu. PFX sertifika dosyasını bir Java Anahtar Deposuna (JKS) dönüştürdü ve kavanozlarımı imzalamak için (Netbeans'da) kullanıldı. Daha sonra kavanozları doğruladı ve hepsi iyi görünüyor. Ancak, web sunucusu üzerindeki dosyaları güncelledim, programı JNLP dosyası aracılığıyla başlattım ama yine de aynı davranış .. umutsuzluk zamanı!
DÜZENLEME 6 Haziran 2013:
Tamam, farklı bir yaklaşım başladı.Testin bir sonucu olarak, XML verisini Jersey:
yerine HTTPUrlConnection() kullanarak almaya çalıştım. 7u21 kullanırken http GET isteği yaparken aynı 'Kimlik Doğrulama Gerekli' penceresini alıyorum. 7u17 ile XML yanıtını alıyorum. Hala neyin yanlış olabileceğine dair bir ipucu yok mu? Bu, BASIC kimlik doğrulamasını kullandığım için yapacak bir şey olabilir mi? Bu sunucu ile ilgili olabilir mi? Bunun JNLP dosyasıyla bir ilgisi olabilir mi? Bu soru için arama daha cevaplar, daha fazla soru ben öyle görünüyor :)
Bunu çözdünüz mü? Kabul edilen cevapta tavsiyeyi dennis-the-menace ile boşuna hiçbir şekilde değerlendirmeyi denedim. Önbellek denetimi ile ilgili sunucu tarafını değiştirdiniz mi? – aioobe
Merhaba aioobe, cevabı burada bulabilirsiniz: http://stackoverflow.com/questions/17278303/basic-authentication-fails-with-glassfish – Perneel