java通过Cookie实现sso

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

sso的流程:

同域的情况:

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

1
2
3
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的设置:

1
2
3
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方法,该方法的代码如下:

1
2
3
4
5
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:

1
2
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.

1
2
3
<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文件:

1
2
3
127.0.0.1 www.aaa.com
127.0.0.1 www.bbb.com
127.0.0.1 www.xx.com

Donny wechat
欢迎关注我的个人公众号
打赏,是超越赞的一种表达。
Show comments from Gitment