有时在编代码的时候,累并不是一件坏事,当你累时,你应该出去空气流通的地方放松一下自己的心情。这样说不定会突然茅塞顿开。
研究了一个礼拜 Cookie 跨域问题 ,今天终于解决了,其用这么久解决的原因是:懒得去动,只是思考,所以 希望看到这篇文章的朋友们 一定要 多思考,勤动手。失败就是在快成功的时候没能再坚持一点点。
下来进入正题:我负责的服务器的的域名是: http://uc.cun365.com
计划要跨域共享 cookie 的另一台服务器的域名是: http://www.c365.com
分析:所谓人们常用的 cookie 跨域是说: uc.cun365.com 下登录,凡是后缀名为:.cun365.com 的服务器都可共享同一个 cookie, 这种方式相对比较容易解决,只要设置一下 setDomain(".cun365.com") 就行。但是问题来了,如果要跨另一台服务器的话,我们应该怎么办呢?
解决:再次使用上面那种方法 setDomain(".c365.com") 已经是不可能实现,因为它两使用的服务器不是同一个,而且也不是 二级域名的关系,所以目前有两种方法解决遇到的这种问题。
方法1
步骤(1):创建 jsp 页面 ,名字为: login4cun.jsp
<%@ page language="java" pageEncoding="GBK"%>
测试 在 村网 登录 后 隐士在 生活网 登录
<%
String token = request.getParameter("token");
String passport = request.getParameter("passport");
if(null != token && null!=passport){
response.setHeader("P3P","CP=\"NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC\"");
session.setAttribute("cnlifeUserToken", token);
session.setAttribute("cnlifeUserId", passport);
Cookie aCookie = new Cookie("cnlifeUserToken", token);
aCookie.setMaxAge(-1);
aCookie.setDomain(".c365.com");
aCookie.setPath("/");
response.addCookie(aCookie);
passport = new String(passport.getBytes("GBK"), "ISO8859_1");
aCookie = new Cookie("cnlifeUserId",passport);
aCookie.setMaxAge(-1);
aCookie.setDomain(".c365.com");
aCookie.setPath("/");
response.addCookie(aCookie);
}
%>
注意:创建好后一定要放在 域名为 :http:www.c365.com 服务器上,我就是因为不相信这种做法,害的走了4天弯路。
步骤(2):再创建一个 jsp 页面,名字为: test.jsp
<%@ page language="java" pageEncoding="GBK"%>
<script type="text/javascript" src="http://www.c365.com/header1215/login4cun.jsp?token=aea1a0b549703a2060142b93ecc2846c&passport=renweigang">
</script>
测试 在 村网 登录 后 隐士在 生活网 登录
<%@ page language="java" pageEncoding="GBK"%>
<script type="text/javascript" src="http://www.c365.com/header1215/login4cun.jsp?token=aea1a0b549703a2060142b93ecc2846c&passport=renweigang">
</script>
测试 在 村网 登录 后 隐士在 生活网 登录
<a href="http://www.c365.com/ssoserver/logout.jsp?backurl=http://www.rwg.com:8080/ucenter/themes/default/logout.jsp">注销</a>
注意:以上的参数: token:是 辨别用户的令牌,你可以自己写一个,思路是:先验证用户名与密码是否匹配,如果匹配则 自动生成 一个 有效 的证书(16位的随机数).
passport :为 用户登录名,一定不要是中文,否则会出现 exceptin,因为它是往cookie 中保存,而cookie 的值是不支持 中文的,如果是中文 则把它转为: iso-8859-1即可。
步骤(3):在火狐浏览器中 测试: http://localhost:8080/ucenter/test.jsp ,然后看看 域名为 .c365.com 的值是不是添加进来了。
注意: 最好在火狐下测试,因为显示的比较直观。
- 大小: 26.8 KB
- 大小: 20 KB
- 大小: 15.1 KB
分享到:
相关推荐
单点登录(SSO)-同域名、不同域名
所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过...
SSO单点登录【基于cookie二级域名下跨域共享】的简单实现。
cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统
所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过...
java 基于 Cookie 的 SSO 中间件 kisso 低代码
CAS-SSO源码包(两个版本)part1
所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过...
也就是说,该用户能访问几个应用系统,就创建几个cookie,并分别设置好每一个cookie的域名(完整的域名,比如:aa.lgcns.com); 4) 用户在 sso登录成功的页面,选择一个链接,请求某一个应用系统的页面;
自己写的一个SSO跨域单点登录Demo,直接使用Eclipse导入即可使用,压缩包中附有自己总结的详细的使用说明和跨域登录原理讲解,感兴趣的朋友可以看一下。
2. Loong SSO支持 客户端 跨服务器、跨域名、跨应用、跨开发语言 3. SSO客户端调用, 支持各种 能用于WEB开发的 语言(比如 perl、PHP、Ruby、Python、Java)等等语言 4. SSO客户端开发简单,修改量非常小。 只要修改...
一个sso的解决方案
sso单点登录-cookie版Demo
公司需要做统一的sso单点登录,由于CAS过于重量级和复杂。所以就自己基于springMVC mybatis redis缓存实现了SSO单点登录。mark一下!
SSO单点登入,使用cookie实习(Struts2)
跨服务器登录验证(单点登录SSO)的过程和Java实现.pdf
使用springboot搭建的,使用cookie实现的单点登录小项目,适用于有spring基础且想了解单点登录的coder朋友进行学习
跨平台跨服务器跨网站SSO(单点登录)的方案
一个简单的单点登录功能,实现了跨域的单点登录 多个站点之间只需登录一次
sso单点demo,包含sso服务端和两个sso客户端,对学习sso入门很有帮助