feiggle
发贴: 70
积分: 20
|
于 2003-12-19 15:27
前一段,遇到了在Form 6i中应用PJC技术证书的分发问题,试验了那个经典例子,getclientinfo,觉得它的证书分发的问题始终是一个缺陷,如果每台客户机我都安装一下,能叫b/s吗?呵呵!这一段研究了一下,发现有解决的办法,很爽,类似与Java中的数字签名技术,可以解决这个问题,特总结一下,希望对大家有用!
运行的时候会弹出如下窗口:
如果授权本次,则本次会话有权限,如果总是授权,则将自动安装证书
在最新的Forms Server 6i 的发布版本中,Forms Server 6i 的开发可以通过PJC(Pluggable Java Components)技术将JavaBean集成进来,通过PJC接口,可以将JavaBean集成到Form builder中,可以修改Developer 6i默认的标准的UI组件或者可以完全替换原来的UI组件。
PJC技术的简单介绍
首先,先简单介绍一下PJC技术,对于Forms Server的构架我们应先有一个大致的了解,Forms Server可以做Web应用主要是基于应用服务器与基于Java的客户端的构架,应用服务器执行商业逻辑,而Java客户端可以提供用户界面与交互,客户端采用了缓存、压缩与智能消息等技术,使得终端与服务端的通讯更加流畅。 PJC技术要求我们实现oracel.forms.ui.Iview接口,该接口描述了Handler 操作View 的所有的方法,包括生命周期,属性设置,事件处理和显示等方法,列举如下: Public void init (Ihandler handler); Public void destroy(); Public Object getProperty(PropertyID id); Public Boolean setProperty(PropertyID id,Object value); Public void addListener(Class type,EventListener listener); Public void removeListener(Class type,EventListener listener); Public void paint(Graphics g); Public void repaint(Rectangle r) 如果我们要自己编写在Form builder中用的JavaBean,那么该JavaBean就必须实现该接口,对PJC的编写,如果直接实现该接口,编写起来不方便,建议采用Jdeveloper中的PJC wizard。
对PJC的介绍不是很深,只是大致介绍,其中有很多细节,要具体了解,可以以后介绍,其实PJC就是JAVA 类。
数字签名简单介绍
我们重点介绍在Form builder中如何应用pjc技术,这里需要介绍的是数字签名技术。在Oracle 9i Forms中,经常要用的签名的Jar文件,因为它可以使应用运行在Java applet之外的沙箱中,这种沙箱机制是java 作为一个applet(通常在浏览器中)运行的内在安全机制。它保证了代码对客户机访问的权限,如对客户机的文件的读取,打印机的访问等,这种安全机制是对所有的applet都适用的。Form applet 和PJC若都在客户机做applet运行,也会受到这种安全限制,这样我们就需要一种特权,这就用到了数字签名技术。
如果我们用的是Forms 6i,但是我们的forms 6i和Jinitiator 1.3兼容,也可以运用该技术。
数字签名技术的简单介绍
数字签名主要证明两件事情; 1、 代码从哪里来 2、 代码在中间的传输过程中被第三方修改了没有 如果这两个问题回答了,我们就认为我们信任运行的代码,放开权限给applet,applet就可对客户机的文件进行读取,打印机的访问等,证书的发放问题就是一个信任链的确认问题。
数字签名用到很多概念,密钥库,公钥,私钥,对称算法,证书等。对于这些技术可以参见Sun的文档,不需要了解很深,大致写一下对一个jar包数字签名的步骤: 1、 生成密钥库 2、 生成公钥、私钥,可以产生证书(包含我们公司的信息,如名称等) 3、 对我们需要部署的Jar包,用生成的私钥签名
Forms 6i中,PJC的部署问题 在Form builder中,如果我们要引用已经写好的PJC,可在数据块中添加Bean,指定该Bean的实现类为已经编写的 PJC,可在该Bean项的WHEN-CUSTOM-ITEM-EVENT trigger中编写代码,如果编写完毕,在服务器端部署的时候,要同时部署fmb文件和PJC组件,对于PJC的JavaBean,我们要将它生成Jar包,部署到Form server端,方便客户端程序下载执行,大致步骤如下: 1、 在Forms builder中引用特定的JavaBean; 2、 编写fmb之后,编译生成fmx 3、 将JavaBean所用的Java Class打包,生成Jar文件 4、 对生成的Jar文件,用我们自己的私钥进行签名 5、 由于目前版本的Jinitiator 1.3,在对经过多个不同的私钥签名的Jar文件进行认证时会出现错误,所以,将所有用到的Jar包,都用我们自己的私钥进行签名 6、 在Forms Server 端,部署fmx 文件和Jar包 7、 修改Forms Server 端的formsweb.cfg文件,指定客户端要下载的Jar包 经过上述几步,就可以部署成功我们自己签名授权的Forms Server,在这几个步骤中,可能会有一些技术细节需要研究,部署成功的前提是我们的Forms Server端要道Patch 14补丁包,即将Jinitiator升级到1。3之上。
一个例子 当所有的文件和数字签名的Jar包在Forms Server端部署的时候,这里有getClientInfo的一个例子,大致如下: 1、 将客户端用到的Jar文件(已经经过数字签命的Jar文件),放到 ORACLE_HOME\FORMS60\java\ 目录下,该例子有两个Jar包,f60all_signed.jar 和getclientinfo_signed.jar 2、 将getclientinfo.fmx拷到ORACLE_HOME \FORMS60\目录下 3、 修改formsweb.cfg文件,如下 。。。 archive_jini=f60all_signed.jar,getclientinfo_signed.jar archive_ie=f60all.cab connectMode=Socket
对于在Forms 6i中应用PJC技术,上述只是写了一些可能会考虑的方面和应该掌握的技术细节,大致列了一下步骤,可能针对不同的具体应用,在具体实现的过程中,要做不同的配置工作。
需要掌握的技术 1,java 2,java security,主要是数字签名 3,forms builder,pl_sql
希望对大家有用!
(缩略图,点击图片链接看原图)
|