java通过Cookie实现sso

本文详细介绍了SSO(单点登录)机制在不同域环境下的实现方式,包括同域、同父域及跨域情况下的Cookie设置与管理。通过实例展示了如何利用隐藏IFrame在多个应用间共享登录状态,确保用户只需一次登录即可访问所有相关联的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习的慕课网视频,主要使用Cookie来处理的。

sso的流程:

同域的情况:

http://www.aaa.com/demo1/main.action
http://www.aaa.com/demo2/main.action
Cookie的设置:

Cookie cookie = new Cookie("sso","sso_login");
cookie.setPath("/")
response.addCookie(cookie);
同父域:

http://www.aaa.xx.com/demo1/main.action
http://www.bbb.xx.com/demo2/main.action
Cookie的设置:

Cookie cookie = new Cookie("sso","sso_login");
cookie.setDomain(".xx.com"); // 设置父域可见
cookie.setPath("/");
跨域:

http://www.aaa.com/demo1/main.action
http://www.bbb.com/demo2/main.action
在demo1和demo2工程都有addCookie方法,该方法的代码如下:

public void addCookie() {
    Cookie cookie = new Cookie("sso","sso_login");
    cookie.setsPath("/");
    response.addCookie(cookie);
}

这个方法的作用就是向本域中写入cookie.

比如现在要访问demo1,会先跳转到sso server的登录页面,在sso server端登录成功后,会重定向到demo1,在demo1中有一个hiddenUrlList,url为上面demo1和demo2的addCookie:

hidenUrlList.ad("http://www.aaa.com/demo1/addCookie.action");
hidenUrlList.ad("http://www.bbb.com/demo2/addCookie.action");

在demo1向浏览器展示demo1/main.action时,通过一个隐藏的IFrame将hiddenUrlList中的url执行一次,将cookie写入到dmeo1和demo2.

<c:forEach var="item" items="${hiddenUrlList}">
<iframe src="${item} width="0px" height="0px" style="display:none" />
</c:forEach>
SSO登录校验逻辑

1、 校验是否Cookie有sso;
2、 校验cookie名为sso的cookie是否合法。即cookie的value是否是设置的值。
实际使用需要考虑cookie的安全性,以及有效期。

本地测试,可以设置hosts文件:

127.0.0.1 www.aaa.com
127.0.0.1 www.bbb.com
127.0.0.1 www.xx.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值