【转发】利用Cas的原理实现其他系统的接入,跳过登录页面
来自于 https://www.csdn.net/tags/NtTakg4sMzQyNDktYmxvZwO0O0OO0O0O.html
需求
最近领导让我开发为一个老的项目添加功能,实现其他系统接入到我们的系统中来,老项目使用的是cas进行单点登录,为此我去了解了一下cas的使用原理
思路分析
- 我在网上搜索了一套cas的基础教程cas的入门;
- 看了这位作者的一系列文章,发现可以利用cas集成restful进行认证,通过rest来或得cas的那些票据进行认证,从而实现跳过登录的免登操作;
- 但是遗憾的是,无论我怎么操作,实验,都无法实现文章中介绍的效果,无法将cas与restful整合好,无法获取票据; -于是我在参考了网上各种例子,并且参考了官方文档,都无法实现我的要求,于是我决定该换思路;
- 幸运的是,我阅读了另外一片文章,里面没有讲述实现的方法,但是给了我一个新的思路;
- 当访问一个cas客户端的时候,因为没有登录,他都会跳转到cas服务端的login这个地址,但是不同于直接访问cas的login地址,通过客户端地址访问,会产生这么一个地址,login?service=客户端的地址;
- 这里我发现,我可以使用一种取巧的操作,直接修改登录页面,实现我的免登功能
功能实现
- 首先找到服务端的casLoginView.jsp页面
- 添加js方法,获取url上的参数
//获取网址上的url
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
- 在页面加载函数中添加方法,判断参数中的service是否符合你需要免登操作的地址,进行免登操作
$(function(){
//获取url上的service参数
var service = getQueryVariable("service");
//判断service地址和我们需要免登的地址是否一致
if(unescape(service)=='http://127.0.0.1:8080/eventcore/'){
//如果地址一致,将原来的页面隐藏掉,提升用户感受
$("#loginBody").hide();
//注入用户名密码
$("#username").val('admin');
$("#password").val('111111');
//将表单地址修改为我们需要跳转的地址,否则无效
$('#fm1').action = "http://127.0.0.1:8081/cas/login?service=http%3A%2F%2F172.20.41.198%3A8080%2Feventcore%2F";
//触发提交按钮,实现类似免登效果
$("#sub_button").click();
}
}
结语
因为我自身暂时无法整合restful的api,才采用这种方式进行取巧,且该项目为内部项目,所以没有考虑一些安全性的因素,后续看业务需求在进行修改.