在数据中心系统里,westdc和geonetwork里各维护了一套用户库,有各自的登录系统,之前在处理元数据的时候二者一直是独立的,之前有一篇帖子是将geonetwork的用户密码更改为md5后进行同步,但这终归不是长久之计,因此需要一个好的方法能把二者给深度集成。
深度集成的关键在于两个方面:
1. 用户信息能否自动同步,即在westdc中修改后能否自动反馈到geonetwork中。
2. 用户登录信息能否自动进行,即只需要用户登录一次即可。
存在问题:
1. 二者的用户密码加密方式不同,一个是MD5,一个是SHA1。
2. 二者的WEB实现代码不同,一个是PHP5,一个是JAVA,二者的SESSION不能直接共享。
而为解决这些问题,网上也有很多的说明,SESSION共享可以通过数据库保存SESSION的方法进行处理,但这种方法对两个系统都有相当大的修改,工作量较大。因此后来用了一个折衷的方法来进行处理,即:
1. 在westdc中用户密码不变,而在geonetwork中的密码为sha1(md5(md5(pwd)))方式。
2. 在westdc中登录后可以自动登录geonetwork系统,对用户而言,是只登录了一次。同时由于采用了两次MD5加密,也保证了安全性。
但在处理数据库自动同步的时候,还是出现了很多问题,主要是通过view进行了规则的中转后,导致SQL执行失败,最终通过在users表中添加trigger,而由trigger直接调用dblink执行操作geonetwork/user表。
BTW:在postgresql中使用sha1需要安装pgcrypto扩展。
发表回复