cas无缝单点登录(原创)
之前一直有一个问题残绕着自己,今天,终于很粗糙的解决了这个问题。
众所周知,按照cas单点登录,默认情况下,在不登录的情况下,打开网站是必须要跳转到登录页面的。那有什么方法可以控制吗,当然有,很简单,在 客户端应用中的web.xml文件中,很简单就能配置。关键代码如下:
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://localhost:9443/cas/login</param-value>
</init-param>
<init-param>
<!--这里的server是服务端的IP -->
<param-name>serverName</param-name>
<param-value>http://localhost:8080/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/login</url-pattern><!--/*-->
<!--以上原本是拦截根目录的,改成/login,就可以只有在点击访问登录链接时才会去拦截验证,即使在不登录的情况下也能正常打开网站-->
</filter-mapping>
<!--以上原本是拦截根目录的,改成/login,就可以只有在点击访问登录链接时才会去拦截验证,即使在不登录的情况下也能正常打开网站-->
这个注释关键所在。
但是即便是这样,还有一个很尴尬的问题,那就是在A网站登录后,在B网站打开后,依然不能登录,需要点击登录链接才会登录,这也是因为改了拦截目录的原因,那如何解决这个问题呢,那就让他自动点击这个登录链接,主动访问这个链接,那这里分为两种情况,一种是:如果,A网站登录后,打开B网站,应该让他去点击这个链接,让他自动登录。另一种情况是:未登录情况下,如果没有登录,那么还让他点击这个链接。未登录情况下,点击这个链接是会跳转到登录页面的,那就在登录页面上进行一个判断跳转过来的链接是手动点击的链接还是,自动点击链接过来的。那如何判断这个链接呢,那就开始进入我们的绕圈子吧。写这个的时候,我也绕了好几圈,晕了好几回,所以,你第一遍没看懂是正常了,呵呵。多看几遍,想几遍就明白整个流程了。 在上述背景情况下,我们要实现的是,在登录或未登录情况下,都能正常打开网站。
那我们如何去实现这个东西嗯,最主要是通过客户端js来实现的。 首先我们的登录链接要给一个链接参数:例如
webl应用中:
<a id="sso_login" href="https://localhost:9443/cas/login?service=http://localhost:8080/nodoor3/index.do&&cas_user=no">登录</a>
加上了一个&&cas_user=no,可以在cas中的登录页面中判断,这个链接是从哪儿来的:看这个js
<script>
var bbs_url= window.location.href;
//判断url是否从login页面中跳转过来的。
if(bbs_url.indexOf("?")<0){//判断cas客户端中js是否添加了这个?cas_user=no这个参数
var sso_login=document.getElementById("sso_login");
var sso_href= sso_login.href;
var start = sso_href.indexOf("&");
//cas_url获取这个https://localhost:9443/cas/login?service=http://localhost:8080/nodoor3/index.do链接
var cas_url = sso_href.substring(0,start);
window.location=cas_url;//自动访问登录链接,如果A网站登录后,B网站通过这段js就会自动登录,反之则会跳转到cas中的login页面
}
</script>
如果没有登录跳转到cas中的登录页面怎么处理呢,且看。
cas客户端中casLoginView.jsp中js如何处理返回到原来的首页
<script> var srcc = window.location; //获取地址栏href
srcc = srcc.toString()
start = srcc.indexOf("&");
cas_url_start=srcc.indexOf("=");
if(start<0){//判断是否手动跳转过来的,加参数了说明是,手动跳转,则正常打开登录页面,没有参数,说明是自动跳转,则再返回到首页
//刚才跳转过来的https://localhost:9443/cas/login?service=http://localhost:8080/nodoor3/index.do
//cas_url是为了获取返回的链接,获取到http://localhost:8080/nodoor3/index.do链接再跳回到原来的链接。
var cas_url=srcc.substring(cas_url_start+1,srcc.length);
cas_url=cas_url+"?cas_user=no";//再加上这个参数,在web客户端中判断是否还需要自动访问链接
window.location=cas_url;
}
</script>
web2应用也是一样的。
不知道,大家有没有看懂,反正我自己写着都写蒙了,有什么问题大家再问我吧。
而且这个问题不是很好的解决方案,不知道大家有没有什么更好的方案。
cas无缝单点登录(原创)的更多相关文章
- CAS实现单点登录SSO执行原理及部署
一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...
- Cas(07)——建立使用Cas进行单点登录的应用
建立使用Cas进行单点登录的应用 目录 1.1加入cas-client-core-xxx.jar到classpath 1.2配置Filter 1.2.1AuthenticationFilter 1.2 ...
- 如何利用tomcat和cas实现单点登录(1):配置tomcat的ssl和部署cas
如何利用tomcat和cas实现单点登录,借鉴了网上的很多教程,主要分为以下几个步骤: 一:下载好cas,tomcat之后,首先配置tomcat: 用鼠标右键点击"计算机"→选择& ...
- CAS实现单点登录流程
CAS实现单点登录 环境 客户端: www.app1.com CAS服务器: www.cas-server.com 1.浏览器:发起请求 www.app1.com 2. 客户端:Authenticat ...
- [精华][推荐]CAS SSO 单点登录框架学习 环境搭建
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- CAS SSO单点登录框架学习
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- [精华][推荐]CAS SSO单点登录服务端客户端实例
1.修改server.xml文件,如下: 注意: 这里使用的是https的认证方式,需要将这个配置放开,并做如下修改: <Connector port="8443" prot ...
- CAS的单点登录和oauth2的最大区别
CAS的单点登录时保障客户端的用户资源的安全 oauth2则是保障服务端的用户资源的安全 CAS客户端要获取的最终信息是,这个用户到底有没有权限访问我(CAS客户端)的资源. oauth2获取的最终信 ...
- Spring Security 集成CAS实现单点登录
参考:http://elim.iteye.com/blog/2270446 众所周知,Cas是对单点登录的一种实现.本文假设读者已经了解了Cas的原理及其使用,这些内容在本文将不会讨论.Cas有Ser ...
随机推荐
- iOS UITableViewHeaderFooterView设置背景色为透明
给UITableViewHeaderFooterView设置背景色分2种情况 1.tableView在group模式下,UITableViewHeaderFooterView的背景色默认是透明的,此时 ...
- Unix系统编程()main函数的命令行参数
命令行参数输入双引号是什么效果? 好像可以去空格化.
- git版本管理之git-ssh 配置和使用
1.设置用户名和邮箱 $ git config --global user.name "gsx-gh" $ git config --global user.email " ...
- Zookeeper中的选举机制
Zookeeper虽然在配置文件中并没有指定master和slave,但是,zookeeper工作时,是有一个节点为leader,其他则为follower.leader是通过内部的选举机制临时产生的. ...
- confirg
如果用户点击确定按钮,则 confirm() 返回 true.如果点击取消按钮,则 confirm() 返回 false.在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入 ...
- WebAPI实现移动端上传头像接口
测试时可以直接使用PostMan模拟发送请求 /// <summary> /// 手机端上传头像接口 /// </summary> /// <param name=&qu ...
- socket.io 中文api
1. 服务端 io.on('connection',function(socket)); 监听客户端连接,回调函数会传递本次连接的socket io.sockets.emit('String',dat ...
- python3的安装,Window与linux
一.window安装 1.首先是window下的安装. 进入python网站https://www.python.org/downloads/下载页面,选择所需要的版本进行下载. 点击Download ...
- iOS Search bar 输入空字符串也可以搜索
Search bar delegate - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { UITextField *sea ...
- webpack 构建项目入门
参考http://www.cnblogs.com/eyunhua/p/6398885.html ---------------------------------------------------- ...