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("<option value=\"NoCert\">Please Select Certificate</option>"); for(ECertificate cert : scManager.mSignatureCerts) { String certName = cert.getSubject().getCommonNameAttribute(); String certSerialHex = cert.getSerialNumberHex(); loginFormCerts = loginFormCerts.concat("<option value=\""+certSerialHex+"\">"+certName+"</option>"); }
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<Long, CardType> 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<ECertificate> 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); } }