【问题标题】:Smartcard readers not detected by Java in redhat 8.3 environmentJava 在 redhat 8.3 环境中未检测到智能卡读卡器
【发布时间】:2021-01-01 14:31:08
【问题描述】:

我正在使用 redhat 8.3 和 java 1.7
智能卡读卡器 ACS ACR122U 和 Identive CLOUD 2700 R
java 无法检测到智能卡读卡器

我的操作系统版本
$>cat /etc/redhat-release
Red Hat Enterprise Linux release 8.3 (Ootpa)

附加读卡器

$> lsusb
...
Bus 003 Device 003: ID 04e6:5810 SCM Microsystems, Inc. uTrust 2700 R Smart Card Reader
Bus 003 Device 004: ID 072f:2200 Advanced Card Systems, Ltd ACR122U

已安装的 Pcsc 驱动版本

$>pcscd --version
pcsc-lite version 1.8.23.
Copyright (C) 1999-2002 by David Corcoran <corcoran@musclecard.com>.
Copyright (C) 2001-2015 by Ludovic Rousseau <ludovic.rousseau@free.fr>.
Copyright (C) 2003-2004 by Damien Sauveron <sauveron@labri.fr>.
Report bugs to <pcsclite-muscle@lists.alioth.debian.org>.
Enabled features: Linux x86_64-redhat-linux-gnu libsystemd serial usb libudev usbdropdir=/usr/lib64/pcsc/drivers ipcdir=/var/run/pcscd configdir=/etc/reader.conf.d
Bus 003 Device 004: ID 072f:2200 Advanced Card Systems, Ltd ACR122U

启动 pcscd 服务

$>service pcscd status
Redirecting to /bin/systemctl status pcscd.service
● pcscd.service - PC/SC Smart Card Daemon
Loaded: loaded (/usr/lib/systemd/system/pcscd.service; indirect; vendor preset: disabled)
Active: active (running) since Fri 2021-01-01 15:46:49 +0530; 39min ago
Main PID: 5649 (pcscd)
Tasks: 6 (limit: 48503)
Memory: 1.9M
CGroup: /system.slice/pcscd.service
└─5649 /usr/sbin/pcscd --foreground --auto-exit

Jan 01 15:46:49 localhost.localdomain systemd[1]: Started PC/SC Smart Card Daemon.

Java 版本

$>java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

示例 Java 程序

import java.util.List;
import javax.smartcardio.*;

public class PCSCTest {

public static void main(String[] args) {
try {

TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals list size ->"+terminals.size());
//System.out.println(terminals.get(0));

} catch(Exception e) {
e.printStackTrace();
}
}

}

结果是

terminals size-->0

【问题讨论】:

  • 如果pcsc_scan 命令列出了您的阅读器(即您的阅读器可以使用 pcscd),那么您可能需要检查 this question

标签: java redhat detect pcsc


【解决方案1】:

Java查找libpcsclite共享对象有问题,手动提交路径即可

java -Dsun.security.smartcardio.library=/lib/x86_64-linux-gnu/libpcsclite.so.1 -jar Yourjarfile 

【讨论】:

  • 请记住,Stack Overflow 不仅仅是为了解决眼前的问题,而是为了帮助未来的读者找到类似问题的解决方案,这需要了解底层代码。这对于我们社区的初学者和不熟悉语法的成员来说尤其重要。鉴于此,您能否edit 您的答案包括对您正在做什么的解释以及为什么您认为这是最好的方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多