JavaCard——共享接口对象

本文介绍Java平台中的共享接口对象机制。Java卡平台中提供这套机制的目的主要是:一个应用可以穿透防火墙来调用其他应用提供的功能。

首先我们来认识几个概念:

1. 共享接口

javacard.framework.shareable接口是所有共享接口的基类,在每个共享接口中,都将定义一些共享接口方法,实现了这些接口方法的对象可以不受应用防火墙的限制,被不同上下文的应用程序访问其实现的共享接口方法,即,尽管实现共享接口方法的对象和调用共享接口方法的对象属于不同的执行上下文,但仍可完成对共享接口方法的调用。任何类都可以通过实现共享接口中定义的接口方法来实现共享接口。一个类可实现多个共享接口。

2. 共享接口对象

实现了共享接口的类的对象实例,称为共享接口对象(Shareable Interface Object, SIO)。共享接口对象作为一个通用Java智能卡对象,对象中声明的方法或数据域在应用防火墙的保护下,可以被同一上下文的其他方法所访问。但若在不同上下文的方法调用中,只有共享接口方法才可越过防火墙被其他 Applet 调用,而共享接口对象中的其他方法将被禁止调用。

3. 对象共享流程(如何在应用程序中使用这套机制)

假设有服务器应用 A 和客户应用 B,他们属于不同的执行上下文,且客户应用需要服务器应用提供某些服务支持,那么其运行流程如下:

 

 

(1) 若服务器应用 A 要为其他应用提供某一服务,首先服务器应用 A 需定义一个扩展自 javacard.framework.fhareable 的共享接口,并在共享接口中定义将要被其他应用所访问的共享接口方法。

(2) 在服务器应用 A 中定义一个实现了上述共享接口的类 C,类 C 需对共享接口中定义的方法给出具体实现。该类中也可以定义其他方法和域,但只有共享接口中定义的方法才能被其他应用所访问,其他方法和域则被应用防火墙保护(应该是被卡外虚拟机的语法规则保护,但这个地方作为卡内虚拟机也要进行保护,否则会有安全漏洞,例如:客户端应用获取了共享接口对象sio,强行将其转换为原有类型,然后调用其非共享接口)。

(3) 若要实现对象共享,服务器应用 A 先要创建一个类 C 的对象实例 O。由于 O 属于服务器应用 A,因此应用防火墙允许服务器应用 A 访问 O 中的域和方法。

(4) 若客户应用 B 要调用服务器应用 A 中的某个方法,客户应用首先要调用Java卡平台提供的API——JCSystem.getAppletShareableInterfaceObject()方法,向 JCRE 请求服务器应用 A 定义的共享接口对象。JCSystem.getAppletShareableInterfaceObject()方法会遍历卡内应用列表以找到相应的共享接口对象。

(5) JCRE 接到请求后,查找内部的应用的注册表,若找到服务器应用 A,则 JCRE 调用服务器应用 A 的 getShareableInterfaceObject()方法来获取服务器应用 A 的共享接口对象 O 的引用。

(6) 服务器端应用A在接到JCRE的请求后,服务器端应用A将返回对象O的一个引用给客户应用B。

(7) 客户端应用B在收到服务器端应用A的对象引用后,将该对象引用转换为共享接口类型,并将它作为服务器端应用A的共享接口对象存储起来。在得到此对象接口对象(SIO)后,客户端应用B可通过调用此SIO中的共享接口方法来请求服务器应用A的相应服务。

实例: 

Server:

//==================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值