====== Örnek Applet ======
===== Applet Kodları =====
==== 2. Applet'in Çalışması ====
[[:esya:applet:applet-kodlari:giris|Giriş]] bölümündeki hazırlık aşamasını geçip sunucuyu çalıştırdığımızda ''main.jsp'' sayfası açılır. Bu sayfa web arayüzünün ana sayfasıdır ve bir görsel içermemektedir. Arka planda applet'in sayfa yenilenmelerinden etkilenmemesi için böyle bir yol izlenmiştir. Diğer sayfalar ''iframe'' olarak bu ana sayfanın içine gömülmüştür.
Sayfa açılıp applet başarılı bir şekilde yüklendiğinde bir HTML arayüzü sizi karşılar. Applet'in çalışmasıyla bilgisayara bağlı kart okuyuculara oturum açılarak içindeki sertifikalar bulunur. Daha sonra applet javascript aracılığıyla bu sertifikaları HTML formun içine yazdırır.
Ayrıca sunucu tarafında imzalanması için bir oturum değşkeni de HTML içine gömülür.
Applet'in ana sınıfı içinde yüklenmesi aşamasında sertifikaları HTML forma yazdıran kod:
scManager = SmartCardManager.getInstance();
scManager.listCertificatesOfTerminals();
loginFormCerts = loginFormCerts.concat("");
for(ECertificate cert : scManager.mSignatureCerts) {
String certName = cert.getSubject().getCommonNameAttribute();
String certSerialHex = cert.getSerialNumberHex();
loginFormCerts = loginFormCerts.concat("");
}
Sertifikaların karttan okunması akıllı kart işlemlerinin yapıldığı sınıfta gerçekleşmektedir:
cardIndex = -1;
int certNo = -1;
for (String terminal : mTerminals) {
cardIndex++;
try {
boolean APDUSupport;
try {
APDUSupport = APDUSmartCard.isSupported(terminal);
} catch (NoClassDefFoundError ex) {
logger.error("APDU smartcard cannot be created. Probably AkisCIF.jar is missing");
APDUSupport = false;
}
logger.debug("Smartcard index:" + cardIndex);
if (useAPDU == true && APDUSupport) {
logger.debug("APDU Smartcard will be created");
APDUSmartCard asc = new APDUSmartCard();
CardTerminal ct = TerminalFactory.getDefault().terminals().getTerminal(terminal);
asc.openSession(ct);
smartCards.add(asc);
} else {
logger.debug("PKCS11 Smartcard will be created");
Pair slotAndCardType = SmartOp.getSlotAndCardType(terminal);
P11SmartCard p11SmartCard = new P11SmartCard(slotAndCardType.getObject2());
smartCards.add(p11SmartCard);
smartCards.get(cardIndex).openSession(slotAndCardType.getObject1());
}
// take the certs of a terminal
List certsOfATerminal = getCertificates(cardIndex);
// for each cert, save to hashmap which cert belongs to which terminal
for (ECertificate certificate : certsOfATerminal) {
certNo++;
mSCManager.certTerminalMap.put(certNo, terminal);
}
mSignatureCerts.addAll(certsOfATerminal);
// todo burdaki session kapatma islemini kaldirdik, sebebi bir daha session acmak icin beklemeyelim
// todo yapilmasi gereken: bi yerlerde diger kart okuyuculara ait sessionlari kapatmak
//smartCards.get(cardIndex).closeSession();
}
catch (Exception e) {
logger.error("Error in listing certificates of terminals", e);
}
}