一直以来网上很多高手使用CAS平台时被埋在了不允许外部提交这个死胡同里,大家也见招拆招,iframe方式,以及修改webflow等方式来解决,但是效果一般般,看资料的人更是一头雾水,照着弄80%的人失败。
经过公司项目上需要,研究了一下,实际上cas还可以这样玩来实现外部表单提交也就是ajax提交方式。
长话短说,我使用的是tomcat8+JDK1.7+cas4.0,理论上本方法兼容新老版本(需要对应调整截取)。首先在cas默认首页,右键源码可以看到以下信息
lt和execution 这两个重要信息,其中execution 是随机码,提交数据后,系统会在后台去校验这个,
通过以下抓包,我们可以证明
有了这些信息,我们就不用老想着去改cas来达到目的,我们有更好的办法,不动cas一点源码就能搞定ajax异步登录问题,
1.通过ajax获取CAS Login页面
2.得到Login页面后,解析出lt,execution等重要元素
3.再将这些信息post到login里面大功告成
贴上源码吧:
<a href="#" onclick="login()">点这测试</a> <script type="text/javascript" src="/cas/js/jquery.min.js"></script> <script> function login(){ $.ajax({ url: 'http://localhost/cas/login', type: 'GET', data:{Name:"keyun"}, dataType: 'html', timeout: 1000, async:false, error: function(){alert('Error');}, success: function(result){ //如果用户本来就是登录着的,可以选择让用户直接跳转,还有个更妥当方法是注销用户,然后再掉login重新获取 if(result.indexOf("Log In Successful")!=-1){ // window.location.href="http://localhost/test"; logout(); return; } var ltsl=result.indexOf("\"LT"); //截取LT位置 var lt=result.substring(ltsl+1); lt=lt.substring(0,lt.indexOf("\"")); var evsl=result.indexOf("execution\" value=\""); //截取execution位置 var ev=result.substring(evsl+18); ev=ev.substring(0,ev.indexOf("\"")); post(lt,ev); } }); } function logout(){ $.ajax({ url: 'http://localhost/cas/logout', type: 'GET', dataType: 'html', timeout: 1000, async:false, error: function(){}, success: function(result){ login(); } }); } //提交请求 function post(lt,ev){ $.ajax({ url: 'http://localhost/cas/login', type: 'POST', async:false, data:{"execution":ev,"lt":lt,"password":"1","submit":"LOGIN","username":"1","_eventId":"submit"}, //dataType: 'json', timeout: 1000, error: function(r){ debugger; alert('Error');}, success: function(result){ //如果登陆成功,则跳转,否则提示错误 if(result.indexOf("Log In Successful")!=-1){ //alert('ok lt:'+lt); window.location.href="http://localhost/test"; } } }); } </script>
以上方式需要注意的是:截取信息时可能由于版本不一样,截取的位置不一样,如果报错建议输出看看是否对了。
本页面记得要放在CAS根目录下,比如访问地址:
http://localhost/cas/testpost.jsp
然后就是你其他域的用户名密码只需要post到这个页面,让这个页面自动去提交就OK了!
相关推荐
单点登录(Single Sign-On,简称SSO)是一种网络应用中的身份验证机制,它允许用户在一次登录后,就可以在多个相互独立的应用系统之间自由切换,而无需再次进行身份验证。这种技术极大地提升了用户体验,同时也简化...
在IT行业中,集成单点登录(Single Sign-On, SSO)是一种常见的身份验证方法,它允许用户通过一次登录,即可访问多个相互独立的应用系统。在这个场景中,"decision(修正ajax error)" 指的可能是解决在实现SSO过程中...
13.使用CAS实现单点登录 14.使用CORS实现跨域 15.使用twitter的snowflake算法实现分布式ID生成器 16.实现微信扫码支付 17.完成电商秒杀解决方案 18.使用SpringTask实现任务调度 19.使用MavenProfilel实现开发与生产...
Java SSO(Single Sign-On)单点登录是一种身份验证机制,允许用户在多个应用系统间进行无缝登录,只需要一次认证即可访问所有系统。这个技术在企业级应用中非常常见,提高了用户体验并增强了安全性。在Java环境中...
5. **单点登录(Single Sign-On, SSO)**: 若系统复杂,可考虑采用SSO技术,如CAS(Central Authentication Service)或OAuth,实现更高效的身份验证管理。 在提供的文件列表中,"www.site.com"和"www.php7.com"可能...
CAS(Central Authentication Service)是中央认证服务,常用于构建单点登录(Single Sign-On, SSO)系统,尤其在教育和科研机构中广泛使用。它允许用户在一个地方登录后,无需再次验证即可访问多个受保护的应用和...
授权模块,支持CAS单点登录,简单properties配置即可,不用再写很多的xml。 支持多数据源,简单properties配置即可实现,为了安全性吧,暂不提供界面维护数据源,不存数据库。 数据表主键优化,如分类科目表,采用有...
21. **单点登录**:CAS,OAuth2等身份验证协议。 22. **NAT穿透**:STUN,TURN,ICE协议。 23. **邮件收发**:JavaMailSender,POP3,IMAP协议。 24. **应用服务器迁移**:不同应用服务器间的兼容性问题。 25. **...
4. 客户端与服务器端通信:了解AJAX、Fetch API等异步请求技术,处理跨域问题。 5. 测试策略和自动化测试:编写测试用例,利用Mocha、Jest等工具进行单元测试和集成测试。 6. Web安全:理解CSRF(跨站请求伪造)、...