Konular

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:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Aynı uygulama web üzerinde şöyle bir sonuç verecektir:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Sorunun detaylarına baktığınızda aşağıdaki gibi bir ekranla karşılaşacaksınız:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Detaylara indiğinizde de karşılaştığınız kod satırı aşağıdaki gibi olacaktır.

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Bu kodlar:
 

java.lang.reflect.InvocationTargetException
    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

 

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

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ğı.
 
Problem bazı kodların  sadece kullanıcı (Client) tarafında çalışması gerektiğidir. Örnegin bir resim dosyasının kullanıcı bilgisayarı üzerinde küçültülmesi gibi.  Applet Java programlarının, server bilgisayarlarındaki java kodlarının kullanıcı bilgisayarına otomatik olarak (browser aracılığı ile) indirilen ve çalıştırılan versiyonudur. Yani kullanıcı browseri aracılığı ile sizin yazdığınız programı kullanır.

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 .
 
Genel olarak programcılar Güvenilir Applet Teknolojisine (Trusted Applet veya Signed Applet) yabancıdırlar. Bu durum kullanıcı dosyalarında arama, değiştirme gibi işlemleri imkansız hale getirir.
 
Aşağıdaki işlemlerde nasıl Güvenilir Applet oluşturulacağı ile ilgili bilgiler bulunmakta. Bunun için JDK 1.3 veya yukarısı gerektiğini unutmayın.

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

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

şimdi elde ettiğimiz .class uzantılı dosyamızdan .jar uzantılı java dosyamızı oluşturuyoruz:

jar cvf test.jar test.class

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Ş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.

<HTML>
<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

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Şimdide oluşturulan bu anahtarla appletimizi işağretleyelim ( Applet Sign ):

jarsigner test.jar test

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Ş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ının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Kullanıcı şartları kabul ederse:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Artık appletiniz herşeyi yapmaya yetkili olacaktır.

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

 

Kaynak:

Yorumunuzu Ekleyin
Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak Yorumları +1 Yorum
  • Osman
    1
    Osman
    Çok güzel anlatmışsınız, gerçekten faydalı oldu Teşekkürler.
    18 Mart 2011 17:42:21, Cuma
Java Applet Nedir?

Applet örnekleri,applet ve japplet farkı

44,663 Okunma 4 Yorum 05/03/2010 09:49:53

Java Applet Nedir?

Java applet nedir?apllet Örnekleri,applet ve japplet farkı

26,990 Okunma 1 Yorum 11/03/2010 08:59:42

Java Applet Layout Kullanımları

setLayout(null); setLayout(new FlowLayout()); setLayout(new BorderLayout()); new CardLayout(); Yerleşim Yöneticileri

25,870 Okunma 1 Yorum 26/01/2010 00:09:26 12/04/2017 00:12:53

Connecting to a MySQL Database

This document demonstrates how to set up a connection to a MySQL database from NetBeans IDE 6.1. Once connected, you can begin working with MySQL in the IDE's Database Explorer by creating new databases and tables, populating tables with data, and running SQL queries on database structures and content. This tutorial is designed for beginners with a basic understanding of database management, who want to apply their knowledge to working with MySQL in NetBeans IDE.

24,509 Okunma 0 Yorum 16/10/2008 18:48:41

Applet Nedir?

Appletlerin temel özellikleri ve kısıtlamalarının aşılması

22,821 Okunma 0 Yorum 03/01/2009 05:42:13

Java Aplleti imzalamak (Signed applet)

Security manager adlı sistemi sayesinde 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

22,382 Okunma 0 Yorum 03/07/2010 17:36:51

Java İlk Kodlar (jcreator)

Java classpath tanımlamaları, consolda ilk program yazılması, derlenmesi, çalıştırılması aynı uygulamanın netbeansta yapılışı ve class, java ve jar dosyalarının gösterilmesi

20,767 Okunma 0 Yorum 27/10/2008 14:22:54

Java Applet JFileChooser

Java swing arayüzlerinden - dosya sistemine erişimi sağlayan JFileChooser sınıfının detayları

19,724 Okunma 0 Yorum 19/07/2010 23:39:20

Dosya Gezinti Peceresi Açmak

NetBeans IDE'si ile bir dosya açma penceresi açarak dosya sisteminde gezinti yapan ve sonuçta seçilen dosyayı ekrana yazıp, kaç karakterden oluştuğunu veren bir uygulama.

17,223 Okunma 0 Yorum 07/11/2008 10:41:35

Yükleniyor...