单点登录的一种简单实现

SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。

这里只是介绍下一种简单的实现,并不能完全称为SSO,即通过URL的传值来实现同一登陆界面对不同系统的登录(在一个界面里把要登录的系统账号密码都输一遍,之后访问各个系统都是已登录状态)。

总体说下思路,核心就是把登录其他系统的URL直接发出去而不再分别访问它们的登录页。首先在一个系统中设置要进行多点登录的系统,输入系统名、用户名输入框ID、密码输入框ID、form表单名、登录链接URL、字符集等,把它们做为设置保存起来,这里可以存在properties文件中,避免未登录时访问数据库的不稳定性,存储方式采用json字符串的形式。在登录总系统时,有下拉框选择登录其他系统,登录其他系统时采用把用户名和密码传到主页面的一个iframe中的页面中进行提交,这样可以避免字符集不同造成的问题。

部分代码:
对json进行处理的例子(根据需要使用其中方法)
    private Map getMainData(String data) {
if (data == null) return null;
//将一个字符串转换为JSON对象
JSONObject jObject = JSONObject.fromObject(data);
if (jObject == null) return null;
//从一个JSON对象中取出名为“ary”的数组
JSONArray recordAry = JSONArray.fromObject(jObject.get("ary"));
if (recordAry == null || recordAry.size() == 0) return null;
Map map = new HashMap();
for (int i = 0; i < recordAry.size(); i++) {
//从JSON数组中取得一个JSON对象
JSONObject obj = recordAry.getJSONObject(i);
if (obj == null) continue;
String value;
try {
//从JSON对象中取得一个属性,如果无法确定该属性一定存在,要加try{}catch(){}
value = obj.getString("v");
} catch (Exception ex) {
continue;
}
//将一个对象放入JSON对象中,这里注意是加入不是替换!!!要想替换要删掉原来的再重加入
obj.accumulate("key", "value");
}
//将一个JSON对象转为字符串
String jsonStr = jObject.toString();
return map;
}



登录页面js方法(登录其他系统)
function webLogIn() {
//取出要登录系统登陆页面的form名、输入框id
var formName = document.all.actForm.formName.value;
var userNameInputId = document.all.actForm.userNameInputId.value;
var pasdInputId = document.all.actForm.pasdInputId.value;
//得到iframe中页面元素,注意使用eval处理名称是变量的情况
var webUserIdElement = eval("webPage.document.all."+formName+"."+userNameInputId+";");
var webUserPwdElement = eval("webPage.document.all."+formName+"."+pasdInputId+";");

webUserIdElement.value = document.all.actForm.userId.value;
webUserPwdElement.value = document.all.actForm.userPwd.value;

if (document.all.actForm.userId.value== "") {
alert("请输入用户名。");
return false;
}
if (document.all.actForm.userPwd.value=="") {
alert("请输入密码。");
return false;
}
var objForm = eval("webPage.document."+formName+";");
alert("请求已提交");
objForm.submit();
}

后台把系统的其他信息直接传到iframe中的页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值