• 2006年07月27日

    j2ee系统与rtx的整合实现

    Tag:Java

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://fireshort.blogbus.com/logs/2918289.html

         在rtx的论坛可以看到很多类似下面的论调:
        “您好,所有用我们的api开发的jsp或java程序都必须放在SDK的安装包的java目录下,与RTXSvrApi.java同一目录(注意不能单独 copy出RTXSvrApi.java文件)。”简直让人吐血不止啊,幸好实际情形不是这样(也不可能是这样,要这样tx的程序员都找块豆腐撞死算了,否则也会给其他的java开发者口水淹死:-))。实际情形是:可以单独copy出RTXSvrApi.java,只是不能改掉RTXSvrApi.java的包名。

    整合步骤(在3.61版本下通过):
        1、将Crypt.dll、RTXParser.dll、SDKAPI.dll、SDKAPIC.dll、SDKAPIJava.dll复制到%windir%\system32目录下面;
        2、定义一个简单的servlet:RtxServlet,覆盖doGet方法,在服务器端获得sessionkey,并传给客户端:
        protected void doGet(HttpServletRequest request,HttpServletResponse response)
                throws ServletException,IOException
        {
            RTXSvrApi RtxsvrapiObj=new RTXSvrApi();
            if(RtxsvrapiObj.Init())
            {
                String userID=new OperatorAdminObj().getCurrentUserId(request);
                String sessionKey=RtxsvrapiObj.GetSessionKey(userID);
                request.setAttribute("loginUser",userID);
                request.setAttribute("rtxSessionKey",sessionKey);
                RtxsvrapiObj.UnInit();
            }
            getServletContext().getRequestDispatcher("/rtx/rtx.jsp").forward(
                    request,response);
        }
        3、在rtx.jsp中,在客户端调用activex控件,自动登录rtx客户端。
    <%@ page contentType="text/html; charset=utf-8" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>rtx</title>
    <script type="text/javascript" src="javascript/global.js"></script>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <script language="vbscript">
    Sub window_onload
       Set objProp = RTXAX.GetObject("Property")
       objProp.Value("RTXUsername") = "${loginUser}"
       objProp.Value("LoginSessionKey") = "${rtxSessionKey}"
       objProp.Value("ServerAddress") = "127.0.0.1"
       objProp.Value("ServerPort") = 8000
       RTXAX.Call 2, objProp
       window.close
    End Sub
    </script>
    </head>

    <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" >
    <OBJECT id=RTXAX
    data=data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA==
    classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D VIEWASTEXT>
    </OBJECT>
    </body>
    </html>
         4、在你的系统登录验证完毕后,通过打开新窗口调用RtxServlet,
    window.open("RtxServlet","","")就可以了。

        rtx这种通过SessionKey的方式来实现其他系统与其的集成,对程序员来说是很方便的,但有其安全性问题:系统管理员可以很容易在服务器端获得SessionKey,再冒充其他人登录。不过这个世界上从无攻不破的堡垒,没有最好,只有更好。


    收藏到:Del.icio.us




    引用地址:

发表评论

您将收到博主的回复邮件
记住我