2010-08-23 33 views
3

我在java中動態加載pkcs11安全提供程序,只要在運行應用程序之前插入智能卡讀卡器,它就會工作。任何人都可以告訴我如何在應用程序運行時檢測智能卡hotplug?其實我需要java中的pcsc_scan之類的東西。環境是Ubuntu 9.10和java 1.6.0_20。 在此先感謝Java - 如何檢測智能卡hotplug

回答

1

PKCS#11未定義主動通知應用程序有關設備插入/刪除的標準方法。你可以做的最好的辦法是運行一個線程,每秒檢查一次插槽的數量和狀態。

+2

是的,我這樣做了......我看起來像這樣 p11 = PKCS11.getInstance(「/ usr/local/lib/libsiecap11.so」,「C_GetFunctionList」,null,false); long [] slots = p11.C_GetSlotList(true); 而我遇到了同樣的問題。好消息是我可以看到每當一張卡被移除時,但是在應用程序運行時仍然沒有改變插槽的數量。 例如 - 如果我把一個智能卡讀卡器放入一個USB插槽並運行我的應用程序,插槽的數量將爲1.儘管我放置了另一個智能卡讀卡器(應用程序仍在運行),插槽的數量仍然爲1. – user428539 2010-08-24 07:51:39

+1

數字的插槽通常是相同的,但它們的狀態將會改變。將兩個讀卡器(它們是否屬於同一供應商?)不改變插槽數量的事實可能是PKCS#11驅動程序的缺陷。在這種情況下,您需要檢查驅動程序供應商。 – 2010-08-24 08:27:02

+1

是的,這兩張卡來自同一供應商(製造商ID:Siemens AG(C)...型號:CardOS V4.3B(C))... 因此,如果我沒有提前插入智能卡即可啓動應用程序 - C_GetSlotList()將始終返回0. 例如,PC/SC設備掃描程序(pcsc_scan)工作正常,只要我在計算機中插入或拔出smarcard即可檢測到。 – user428539 2010-08-24 08:55:10

1

您可以將javax.smartcardio.* API與PKCS#11一起使用嗎?

CardTerminal類有isCardPresent()waitForCardPresent(timeout),並waitForCardAbsent(timeout)方法可以在一個單獨的線程中用於輪詢卡插入事件。