Skip to content

Social Network Badges

Posts Tagged ‘java ’

iPhone üzerinde JavaYazılımcıların bitmeyen merakı ilginç sonuçlar doğuruyor. Şurada gösterdiği ve şurada uzun uzun anlattığına göre, iPhone üzerine bir Java sanal makinesi ve web server kurarak, cihazı mobil bir java sunucuna dönüştürmüşler.

JamVM çok küçük boyutlu ve açık kaynak kodlu bir Java sanal makinesi. Ufaklığına rağmen, çoklu thread yapısını ve hatta JNI destekliyor. Jetty de tamamen Java kodlu bir web server. Bu ikisini birleştirerek iPhone üzerinde java uygulamalar yazılabilecek bir ortam oluşturmuşlar.

Aslında iPhone’un klavyesi bile yok. Ama geniş bir ekranı ve sanal klavyesi var. Bu da bir programcıyı tetiklemeye yetiyor. 🙂

iPhone bazı uygulamaların bilgilerini SQLite veritabanında saklıyor. Proje ile uğraşanlar SQLite için JDBC sürücüsü kullanarak iPhone veritabanına erişen bir uygulama da yazmışlar.

18 Haziran 2008

Programlama

  • Günümüzdeki bilgisayar mühendisliği dersleri yeterince sıkı değil, iyi düşünme ve problem çözmeyi teşvik etmiyor. Aksine derslere katılımı kolaylaştırmak için içerik daha da basitleştiriliyor.
  • Baba mı, Java mı

  • Mesela, ilk dil olarak Java’nın öğretilmesi bu süreci hızlandırıyor. Özellikle de grafik arayüzlerinin kullanımı öğrencileri arka plandaki kaynak kodu anlamadan sürükle bırak kolaycılığına itiyor.
  • “Matematik eğlenceli değil, derslerdeki oranını düşürelim. Algoritma zor, gerek yok. Hazır kütüphaneler zaten var. Sonra insanlar görsel güzelliğe önem veriyor. Komut satırını boşverin” anlayışı yerleşiyor.
  • Eski yazılımcılardan biri yeni mezun olmuş çalışanına hatayı bulmak için “call stack” a bakmasını söylediğinde “böyle bir şey duymadım” dediğini anlatıyordu.
  • Bir Java kitabı alıyorsunuz, 1200 sayfa. Ama içinde 300 sayfa komutlar kalan 900 sayfa hazır kütüphaneler… Bu yazılım mühendisliği değil, tüketici düzeyi programcılık…
  • Eğer öğrenciler okula gelip, Java’yı, hazır kütüphaneleri ve web programcılığını öğrenip bırakacaklarsa, bu bir işe yaramaz. Yetenek gerektirmeyen işleri, daha ucuza çalışılan ülkelere kaydırırsınız, olur biter.
  • Yani, bugünün hazır kod programcısı, yarın pizzacı olur.
  • Yazılım mühendisi olacak kişinin zor problemlerle uğraşmaktan zevk alması, ilginç algoritmalar üretmesi, zekice veri yapıları oluşturabilmesi lazım. Problem çözmekten sıkılan adam bizim aradığımız adam değil.

Kısaltarak çevirdiğim bu yazıda, New York Üniversitesi’nin kıdemli profesörlerinden Robert Dewar Amerikan öğrencilerinden bahsediyor. Ancak sanki yazılanlar bize pek yabancı değil. Ne dersiniz?

25 Ocak 2008

Programlama

Java ile yazdığınız uygulamanın kaynak kodlarında bir satır bile değiştirmeden kullanıcı adı ve şifre kontrolünü, akıllı kart kullanımını ya da parmak izi kullanımını nasıl eklersiniz?

JAAS (Java Authentication and Authorization Service) paketleri Java’nın içindeki güvenlik sistemini biraz daha geliştiriyor ve farklı kaynaklar kullanılarak güvenlik sistemleri oluşturmayı mümkün hale getiriyor.

Java SDK içindeki java.security.* paketleri bir uygulamanın güvenliğinin sağlanması için temel metotları içeriyor. Bunlar arasında byte-code doğrulayıcısı (byte-code verifier), sınıf yükleyicisi (class loader), güvenlik yöneticisi (security manager), erişim denetleyicisi (access controller), politikalar (policy) ve koruyucu alanlar (protecting domain) sayılabilir.

Bunlara ek olarak genişletme kütüphaneleri (extension API) sayesinde uygulamaların güvenliği istenilen seviyelerde arttırılabiliyor. JAAS bunlardan birisi…

JAAS temel olarak uygulamaya kimlik bilgisi döndürecek bir LoginContext ve bu kimlik bilgisinin çeşitli yollarla elde edilmesini sağlayan bir LoginModule‘den oluşuyor.

LoginModule sınıfından genişletilerek oluşturulan modüller kimlik bilgisi için bir veritabanına bağlanan, Kerberos ya da LDAP dizininden kullanıcı bilgisi alan, akıllı kart okuyucudan veya parmak izi okuyucudan bilgi aktaran bir yapıda tasarlanabilir. Uygulamadan bağımsız olarak modüller tasarlamak bize eklenip çıkarılabilir bir kimlik denetimi yapısı sağlar.

jaas.jpg

Uygulamamızda JAAS kullanmak için şöyle bir yol izliyoruz:

Öncelikle bir konfigürasyon dosyası oluşturuyoruz. Daha sonra uygulamayı çalıştırırken parametre olarak bu dosyayı vereceğiz.

jaas.config

Ornek 
{
   DBLoginModule required 
        debug="true" 
        url="jdbc:mysql://localhost/jaasdb?user=root&password=pass" 
        driver="org.gjt.mm.mysql.Driver";
};

Uygulamayı çalıştırırken kullanımı:

 java -Djava.security.auth.login.config=jaas.config JaasTest 

Burada kullanacağımız modül, bir MySql veritabanına bağlanarak kullanıcı adı kontrolü yapıyor.

JaasTest uygulamamıza bu modüllere erişip kullanacak LoginContext’i tanımlıyoruz.

JaasTest.java

...
/* JAAS sınıfları */
import java.security.*;
import javax.security.auth.*;
import javax.security.auth.login.*;

...

        try {
            // LoginModule ile haberleşecek olan sınıf
            ConsoleCallbackHandler cbh = new ConsoleCallbackHandler();
	 
            LoginContext lc = new LoginContext("Ornek", cbh);

            try {
            	// LoginModule içinde login metodunu kendimize uygun şekilde
            	// tanımlayacağız.
                lc.login();

		// Subject : kimlik denetimi bilgilerini içeren nese 
                subject = lc.getSubject();

		// Principal : Yetkili olan kişiler vb.
                Iterator it = subject.getPrincipals().iterator();

		// Credential : Yetkiler, haklar vb.
                it = subject.getPublicCredentials(Properties.class).iterator();

		...
		// Programın çalışma rutinleri
		
		// Program çıkışında 
                lc.logout();
            } catch (LoginException lex) 
	    {
              ....
            }

        } catch (Exception ex) 
	{
            ...
        }

        System.exit(0);
    }

Temel anlamda kullanılan sınıf ve metotlar böyle…
Şimdi MySQL veritabanına bağlanıp kontrol yapan login modülümüze bakalım.

DBLoginModule.java

...

import java.security.*;
import javax.security.auth.spi.LoginModule;
import javax.security.auth.login.LoginException;
import javax.security.auth.Subject;
import javax.security.auth.callback.*;

...

public class DBLoginModule implements LoginModule 
{

    // initial state
    CallbackHandler callbackHandler;
    Subject  subject;

...

    public void initialize(Subject subject, CallbackHandler callbackHandler,
            Map sharedState, Map options) 
    {
      // ön işlemler
    }
    
    public boolean login() throws LoginException 
    {
	// veritabanına bağlanıp yapılacak kontroller
	// Buraya akıllı kart, parmak izi okuyucu vb. 
	// kontrolleri eklenebilir
    }

    public boolean commit() throws LoginException 
    {
       // Otomatikmen çalışır
       // login işlemi doğru yapıldı ise true, değilse false döndürür
    }

    public boolean abort() throws javax.security.auth.login.LoginException 
    {
      // işlem başarısız  olduğunda burası çalışır
    }

    public boolean logout() throws javax.security.auth.login.LoginException 
    {
      // uygulamadan çıkışta yetkileri temizler 
    }
}

Bu örnekte veritabanına bağlandık. Sadece LoginModule ve jaas.config dosyalarında değişiklik yapılarak istenen kontrol yöntemi uygulanabilir. Böylelikle uygulamamızın kaynak koduna müdahale etmeden güvenlik kontrolü ekleyebiliriz.

JAAS konusunda bilgilenmek isteyenler için maalesef Türkçe doküman yok. Ancak İngilizce olarak şu bilgilendirici sunum, şu yazı, Sun sitesindeki orijinal kılavuz faydalı olabilir. Ayrıca veritabanına bağlanan, akıllı kart okuyucudan bilgi alan, parmak izi okuyucuya bağlanan örnekler incelenebilir.

11 Aralık 2007

Programlama