实现多个系统的模拟登录

zhangpeng 2014-11-01

       公司内部要用几个内部系统,由于几个系统经常登录比较繁琐。所以需要统一登录认证的功能。回去一查 现在比较通用的方法为单点登录(比如CAS),但这个需要一个公共的认证服务,每个子系统还要有一个client端服务。由于其他系统是别的公司 不同语言开发的  ,不能让人家写client端程序吧!最后只得在本系统中实现直接登录其他系统。

        既然不能用单点登录而且跨服务器、跨开发语言,只能用html和js来模拟登录动作了。大致想法为:本系统中放一个公共登录页,下拉框对应相应系统。登录时根据下拉系统跳转到远程html。

下拉框代码:

<select name="Searchtype" id="Searchtype">
  		<option value="系统1远程html地址">系统1</option>
  		<option value="系统2远程html地址">系统2</option>
  		<option value="系统3远程html地址">系统3</option>
  </select>

 onSubmit执行js为:

function oz(){
	  var type=document.getElementById("Searchtype").options[document.getElementById("Searchtype").selectedIndex].value;
	  debugger;
	  var name = base64encode(encodeURI($("#username").val()));
	  var pass = base64encode(encodeURI($("#password").val()));

	 // alert($.cookie("namets"));
	  type=type+"?namets="+name+"&&passts="+pass;
	  document.form1.action=type;
}

       这里采用url+用户名&密码的方式传送到远程html,登录的form采用post方式提交 否则会把其他元素值都带上了。为了安全起见,用户名密码经过了encodeuri和base64加密。

        前面说的远程html放在相应系统的web服务器中,实质是一个html文件,这个html包括一个导航条(其他系统)和一个大iframe,iframe中包含了要访问的远程系统。iframe放于远程html中解决了“跨域”问题,初次访问该html进入登录页,把接收到的用户名密码放到对应框中并用js模拟点击登录按钮进入系统,这样用户就可以在本html中操作系统了。

        为了便于用户点击导航切换系统,需要把用户名密码存于页面便于登录。这里使用了cookie实现这一功能。

        下面为远程html代码:

<script type="text/javascript">
	var iframe;
	function load() {
		debugger;
		iframe = document.getElementById("iframe");
		iframe.onload = iframe.onreadystatechange = iframeload;
		iframe.src = "模拟登录系统url";
		iframe.width = $("body").width() - 100;
		iframe.height = $(window).height() + 100;
	}
	function iframeload() {
		if (!iframe.readyState || iframe.readyState == "complete") {
			//alert("Local iframe is now loaded.");
			debugger;

			var url = location.href; //获取url中"?"符后的字串
			var theRequest = new Object();
			if (url.indexOf("?") != -1) {
				var str = url.substr(1);
				strs = str.split("&");
				for ( var i = 0; i < strs.length; i++) {
					theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
				}
			}
			var name = theRequest["namets"];
			var pass = theRequest["passts"];
                        
                        $.cookie("namets", "name",{expires:2}); 
                                          $.cookie("passts", "pass",{expires:2}); 
 			var obj = document.getElementById("iframe").contentWindow;
			obj.document.getElementById("模拟登录系统用户名框id").value = name;
			obj.document.getElementById("模拟登录系统密码框id").value = pass;
			var ifmObj = obj.document.getElementById("模拟登录系统submit的id");
			ifmObj.click();
		}
	}
	function dd() {
		var ts = document.getElementById("sys1");
		//ts.href = "http://192.168.1.25:8080/fan/zz.html";
		//?name=system&pass=123456
		alert($.cookie("namets")+""+$.cookie("passts"));
		ts.href="系统1的远程html文件";
	}

	
</script>
<body onload="load()">
		<div>
			<a id="sys1" onclick="dd()" target="_blank"><font color="red">系统1</font> </a>
			<a id="sys2"><font color="red">系统2</font> </a>
			<a id="sys3"><font color="red">系统3</font> </a>
		</div>
		<iframe id="iframe"></iframe>
</body>

使用时只要把该html放到要访问系统的服务器下即可

此程序的不足之处,还请高手们指教。

相关推荐