Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak
Applet kodlarınız kendi makinenizde sorunsuzca çalışıyor ancak webe attığınızda çalışmıyorsa sebebi appletlerin güvenlik sınırlamalarıdır. Bunu aşmak için appleti imzalamalısınız ve kullanıcılarda appletin bilgisayarlarında yapabileceklerini kabul ettiklerinde ancak applet çalışacaktır. Buna Yerel Dosya Sistemine Erişmeye Yetkili Güvenilir Applet yazmakta denebilir.
Kullanıcıların yerel dosya sistemine erişim hakları ile güvenilir uygulamalar oluşturma, bu gün bile hayati bir konu olmaya devam etmektedir.
Java Applet yazanların karşılacağı en önemli problemlerden birisi makinelerinde yazdıkları kodun web sayfalarında çalışmaması olacaktır.
Örneğin aşağıdaki gibi bir applet uygulaması programcının makinesinde şu şekilde çalışırken:
Aynı uygulama web üzerinde şöyle bir sonuç verecektir:
Sorunun detaylarına baktığınızda aşağıdaki gibi bir ekranla karşılaşacaksınız:
Detaylara indiğinizde de karşılaştığınız kod satırı aşağıdaki gibi olacaktır.
Bu kodlar:
at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(DeployAWTUtil.java:116)
at sun.plugin2.applet.Plugin2Manager.runOnEDT(Plugin2Manager.java:3415)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:2967)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1444)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
at java.lang.System.getProperty(System.java:650)
at javax.swing.filechooser.FileSystemView.getHomeDirectory(FileSystemView.java:393)
at javax.swing.plaf.metal.MetalFileChooserUI.installComponents(MetalFileChooserUI.java:253)
at javax.swing.plaf.basic.BasicFileChooserUI.installUI(BasicFileChooserUI.java:136)
at javax.swing.plaf.metal.MetalFileChooserUI.installUI(MetalFileChooserUI.java:126)
at javax.swing.JComponent.setUI(JComponent.java:662)
at javax.swing.JFileChooser.updateUI(JFileChooser.java:1763)
at javax.swing.JFileChooser.setup(JFileChooser.java:360)
at javax.swing.JFileChooser.<init>(JFileChooser.java:333)
at javax.swing.JFileChooser.<init>(JFileChooser.java:286)
at test.<init>(test.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at sun.plugin2.applet.Plugin2Manager$12.run(Plugin2Manager.java:2955)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception: java.lang.reflect.InvocationTargetException
Kodlarda kısaca anlatılmak istenen Applet içerisindeki bir bölümün kullanıcı bilgisayarı üzerinde işlem yapmak istemesi ve bunun için kullanıcıdan izin alınmadığı için kodun çalıştırılamayacağı.
Bu noktada appletin güvenliği devreye girer çünkü kullanıcı kodun içeriğini bilemiyeceği için güvenlik riski olan bir durum ortaya çıkar fakat Java nın yazarları buna çare olarak security manager adlı sistemi geliştirmişlerdir,böylece koda bazı sınırlamalar koyarak kullanıcıya zarar vermesi önlenir.
Appletlerdeki bu sınırlamayı aşmanın tek yolu signed applet yaratmaktır.Signed applet yapmak için şu adımları izleyin .
Güvenilir Applet oluşturmak için JDK dışında bize gerekenler javac, keytool ve jarsigner adlı dosyalar olacaktır.
keytool kişisel ve özel anahtar çiftini ( private and public keys ) oluşturmak ve kontrol etmek için gereklidir. Ayrıca Anahtarların saklandığı özel dosya .keystore dosyasınıda keytool oluşturmaktadır.
jarsigner ise apllet classımıza sahip jar dosyamızı Dijital işağretleme Kimliğimizle işağretmek için kullanacağımız araçtır.
Şimdi yukarda çalışmayan appletimizi çalıştırmak için yapnanuz gerekenler:
Öncelikle yazdığınız kodu aşağıdaki gibi derlemelisiniz: yani .java uzantılı kodlarınız byte koda .class uzantısına çeviriyoruz
javac test.java
şimdi elde ettiğimiz .class uzantılı dosyamızdan .jar uzantılı java dosyamızı oluşturuyoruz:
jar cvf test.jar test.class
Şimdi appletimizi çalıştıracak html kodumuzu düzenliyoruz:
Burda eklediğimiz kısım applet tagı içerisindeki archive="test.jar" şeklindeki kısımdır.
<HEAD>
<TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>
<P>
<APPLET codebase="classes" code="test.class" archive="test.jar" width=350 height=200></APPLET>
</P>
<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>
Applet bu halde çalıştığında makalenin başındaki giriş çıkış yetkisizliği mesajı vererek çalışmayacaktır. Ancak unutulmaması gereken bu durumun her applet için geçerli olmadığı sadece kullanıcı bilgisayarında işlem yapacak appletler için durumun böyle olduğudur.
Şimdi appletimiz için özel ve genel anahtarlar oluşturup bu anahtarlarla appleti imzalamak olacak:
Aşağıdaki komutla appletimiz için genel ve özel ( privative ve public ) anahtarı oluşturuyoruz.
keytool -genkey -alias test -validity 365
Şimdide oluşturulan bu anahtarla appletimizi işağretleyelim ( Applet Sign ):
jarsigner test.jar test
Şimdi hazırız, html ve class ve jar dosyalarımızı webe atıp oradan testimizi yapıyoruz:
Ekrana aşapğıdaki gibi bir onay ekranı geliyor, bu ekran kullanıcıdan "bak bu applet senin bilgisayarına format bile atabilir, buna izin veriyor ve bu appleti yazan Muhammed Zeydaga güveniyor musun? " şeklinde bir onayı bir kereliğine isteyecektir.
Kullanıcı şartları kabul ederse:
Artık appletiniz herşeyi yapmaya yetkili olacaktır.
Kaynak: