SSO在当前是非常流行和必须的,当然我们也不例外。
先说说我们的情况,campus和donuts安装在一台服务器上的,campus端口为80,donuts为9080。因为程序源代码看不到,因此感觉没有直接修改程序的可能。只能变通一下……
当然前提是用户在这两个系统上的登录名和密码必须一致,这个问题只有自己想办法写一段代码,从donuts中把数据复制到campus中(campus为什么没有批量导入的功能?!)。而且两个系统对密码的加密结果不一样,直接复制数据库还有问题,真不知道咋个办好。继续想歪主意……
两个系统的数据库分别如下:
数据库名:donuts15
用户表:dbo.xer_user
数据库名:xercampus
用户表:act_user
在服务器上另开一个Apache,端口为88,写了一个login.php
<html>
<head>
<title>单点登陆接口</title>
<?php
//用下面一段区分下访问者来源,选择公网IP或者内部IP访问服务器
function get_client_ip()
{
if(getenv('HTTP_CLIENT_IP')) {
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} else {
$client_ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
return $client_ip;
}
if(substr(get_client_ip(),0,7)=="192.168") {
$toIP2="http://192.168.0.4/prog/login.jsp"; //我们直接把用户名和密码传递给这个页面进行登录判断
$toIP1="http://192.168.0.4:9080/login.jsp/j_security_check"; //这是donuts的登录判断
}
else
{
$toIP2="http://*.*.*.*/prog/login.jsp";
$toIP1="http://*.*.*.*:8081/login.jsp/j_security_check";
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="images/campus.css" type="text/css">
<script language="JavaScript">
<!--
//因为两个系统的表单中名字有点区别,所以用户输入一套口令后,用js复制一份传给另一个系统。
function mysubmit(){
document.formlogin.username.value=document.formlogin.j_username.value;
document.formlogin.passwd.value=document.formlogin.j_password.value;
document.formlogin.target="_blank";
document.formlogin.action="<?php echo($toIP1)?>";
document.formlogin.submit();
document.formlogin.target="_self"; //反复测试单点登录会造成这一个系统无法登陆,关闭浏览器,重新登录即可。原因还不太清楚
document.formlogin.action="<?php echo($toIP2)?>";
document.formlogin.submit();
}
//-->
</script>
</head>
<body text="#000000" leftmargin="0" topmargin="0" marginwidth="0" bgcolor="#EDECE9" >
<table width="755" border="0" cellspacing="0" cellpadding="10" align="center" height="100%">
<tr>
<td align="center">
<form name="formlogin" method="post" action="">
<table border="0" cellpadding="0" cellspacing="0" background="images/login3.gif" width="416">
<tr>
<td colspan="2" align="center"><img src="images/login1.gif"></td>
</tr>
<tr align="center">
<td colspan="2">
<table width="250" align="center" class="f90">
<tr>
<td align="center" colspan="2" >
单点登陆接口
</td>
</tr>
</table>
<table width="250" align="center" cellpadding="4" class="f90" border="0" cellspacing="0">
<tr>
<td align="right" width="80" valign="middle" height="32">用户名:</td>
<td>
<input type="text" name="j_username" size="20" maxlength="20" style="font-size:9pt;border:1px solid black;width:100px">
<input type="hidden" name="username" size="20" maxlength="20" style="font-size:9pt;border:1px solid black;width:100px" type="hidden">
</td>
</tr>
<tr>
<td align="right" height="32" width="80" valign="middle">密 码:</td>
<td>
<input type="password" name="j_password" size="20" maxlength="20" style="font-size:9pt;border:1px solid black;width:100px">
<input type="hidden" name="passwd" size="20" maxlength="20" style="font-size:9pt;border:1px solid black;width:100px">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td> </td>
<td align="center">
<input type=image src="images/login_bn1.gif" name="确定" value="确定" onClick="return mysubmit()">
</td>
</tr>
<tr>
<td colspan="2"><img src="images/login2.gif" width="416" height="35"></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>
希望官方能给一个更好的sso方案,特别是系统用户表数据的统一。
这篇文章被编辑了 1 次. 最近一次更新是在 07/05/2010 13:31:36
|