- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我们现有的基于 Java 的 Web 应用程序之一开发一些新功能。该网络应用程序本身托管在我们的一台内部服务器上,可以通过我们工厂内多个计算机终端的浏览器进行访问。该应用程序用于在我们生产过程的各个阶段进行质量检查。目前,在进行每次质量检查之前,用户需要通过从下拉列表中选择用户名并输入密码来手动登录。为了加快进程,我被要求实现智能卡的读取以进行登录。
我已经使用 javax.smartcardio 编写了一个实用程序类,并且我能够访问插入笔记本电脑的 USB 读卡器终端,从卡中读取 ATR,并在运行应用程序时使用该信息登录到应用程序在我本地的 tomcat7 服务器上。因此,在我的本地计算机上,一切都运行良好。
不幸的是,一旦我将应用程序部署到 Web 服务器上,我就无法再检测到读卡器终端,因为我相信 Java Web 应用程序实际上是在部署到的计算机上寻找读卡器。
有没有什么方法可以让我的 java 代码通过与浏览器交互来访问插入远程工作站的读卡器?
Web 应用程序是用 GWT 编写的,我使用 RPC 调用来访问后端服务器端代码。任何帮助是极大的赞赏。读卡器代码非常简单,所以如果有帮助的话我会发布它:
import java.util.List;
import javax.smartcardio.Card;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.TerminalFactory;
public class SwipeCardUtil
{
private static org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger("hwslqc");
/**
* @return ATR
*/
public static String readCardATR()
{
String ATR = "";
try
{
// Show the list of available terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
if (terminals.size() == 0)
{
LOGGER.error("No Swipe Card Terminals Found");
return null;
}
//System.out.println("Terminal: " + terminals.get(0).getName());
// Get the first terminal in the list
CardTerminal terminal = terminals.get(0);
if(terminal.isCardPresent())
{
// Establish a connection with the card using
// "T=0", "T=1", "T=CL" or "*"
Card theCard = terminal.connect("*");
// Get ATR
byte[] baATR = theCard.getATR().getBytes();
ATR = SwipeCardUtil.byteArrayToHexString(baATR);
//System.out.println("ATR: " + ATR);
// Disconnect
// true: reset the card after disconnecting card.
theCard.disconnect(true);
}
else{
return null;
}
}
catch (Exception ex) {
LOGGER.error("No Card Reader Connected. Please connect a Card Reader and try again. "+ex.toString());
ex.printStackTrace();
}
return ATR;
}
/**
* @param theBytes
* @return theByteArray as a hex string
*/
public static String byteArrayToHexString(byte[] theBytes)
{
StringBuffer sb = new StringBuffer(theBytes.length * 2);
for (int i = 0; i < theBytes.length; i++)
{
int byteToRead = theBytes[i] & 0xff;
if (byteToRead < 16)
{
sb.append('0');
}
sb.append(Integer.toHexString(byteToRead));
}
return sb.toString().toUpperCase();
}
}
最佳答案
您的客户端是一个网络浏览器,您的网络应用程序部署在远程服务器上。从客户端获取阅读器数据的唯一方法是实现一个在客户端运行的软件。有多种方法可以执行此操作,但许多方法不能在客户端的 Web 浏览器上运行。
您可以尝试实现一个小程序,但该小程序很可能没有足够的权限来访问客户端的硬件。要提升小程序权限,必须由浏览器信任的 CA 对其进行签名。这是一个相当大的努力。
另一种方法是根本不使用网络浏览器,而是实现富客户端软件。但这与之前的建议一样痛苦,因为整个产品都基于瘦客户端/网络浏览器概念。
也许您可以使用单点登录方法。如果用户使用 Windows 计算机并使用其帐户登录,您可以使用 waffle。
关于java - Java Web 应用程序可以访问远程工作站上的智能卡读卡器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26949239/
我有一个读卡器(没有插入内存棒)。 当我插入我的电脑时,它在我的电脑中显示一个空驱动器... 是否有可能知道驱动器是否有媒体(抱歉,我不确定如何调用它)... 最佳答案 我发现 MSalters 使用
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我有一台运行 Debian Wheezy 的三星 RF711 Core i7 笔记本电脑,带有集成的 USB Multi Flash 读卡器,但这个问题可能适用于任何在 USB 端口上带有 SD 卡读
我正在开始一个新项目,我是使用 EMV 阅读器和 Javax SmartCardIO 的新手。 我有每种卡的 RID 列表,但是在不知道卡类型的情况下我唯一可以访问的是 ATR,我想知道是否有办法获取
是否可以在没有实际卡“连接”的情况下使用 javax.smartcardio 将 APDU 发送到 NFC 读卡器(例如 ACR1222L)?根据我的 API 调查,您只能使用从 Card 获取的 C
你好, 我正在使用 编写 Java 应用程序 javax.smartcardio.*; 德国身份证的uid(32位)是在每次访问时随机生成的。atr(152 位)保持不变。 目前,我采用 rfid 卡
我无法在 BackTrack 5 R3 (Linux) 中使用 ACR120U 阅读器,我已经下载了必要的 drivers并安装了它们。 lsusb 显示 ACR 阅读器已连接,但如何使用它,nfc-
我试图理解 android 设备中的一个概念,即将新硬件连接到 android 设备。ir 是如何实现的。没有蓝牙。假设我有一个 RF 读卡器,我想使用该硬件读取 RF id 卡,并且我想向我显示该号
这是在我的应用中检测到 NFC 标签的频率: protected void onNewIntent(Intent intent) { if (intent.getAction().e
我想重新打开old question关于从 Android(使用 Android Beam)向基于 PC 的 nfc 阅读器发送一条 NDEF 消息的可能性。有人知道我能否实现吗? 我还需要知道是否存
我正在使用通过 USB 连接的 ACS ACR1252U 读卡器 ( http://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我有这个OMNIKEY CardMan 3121 USB,这是一个读卡器,比如读比利时身份证。我现在通过 USB 将它连接到我的 Ubuntu。 如何在Linux下使用BASH或Python或Java
我正在构建一个 Windows/Java 程序(使用 javax.smartcardio),以使用 ACR122U 设备(内部带有 PN532 NFC Controller 芯片)与 Jewel/To
我之前使用过 ACR 122,它与 Android < 4.1 手机完美配合。我用它来交换 P2P SNEP 消息...但是由于手机是 4.1,当您将手机放在阅读器上方时,阅读器开始发出哔哔声和闪烁。
我是一名优秀的程序员,十分优秀!