关于Cookie的问题
以课程中的项目为例:
.mtv 先登录 -> .mtv域名下没有user-ticket的cookie -> 跳转到 .sso域名下login.html -> 做相关操作(其中会把user-ticket:[uuid]写入sso域名下的cookie中)
那么,问题是:
当用 .music登陆时,.music域名下应该也没有user-ticket:[uuid]这个cookie,那不是也应该跳转到.sso域名下login.html 页面吗?为什么在实际的场景下,.music在第一次登陆的时候就能在它的域名下能找到user-ticket:[uuid]这个cookie
或者,换个问法,我不理解的是:域名、cookie、request、response的关系?
比如:www.a.com这个域名发起一个 /do 的request,那么当服务器使用request.getCookie()的时候,是不是只能获得.a.com下的cookie,同时若在response.addCookie()的时候,是不是也只能写到.a.com下?
如果是这样,那么.mtv首次登陆后,user-ticket:[uuid]这个cookie应该是写到.sso的
而.music登陆时,调用的/login也应该只会带有.music域名下的cookie
那为什么在.music调用了/login后,在@GetMapping("/login")
public String login(String returnUrl,Model model,HttpServletRequest request,
HttpServletResponse response)方法的String userTicket = getCookie(request, COOKIE_USER_TICKET);逻辑中,可以获得.sso域名下的user-ticket:[uuid] cookie?
正在回答 回答被采纳积分+1
我和你的疑问是一样的,全局门票是放在sso域名下的,为什么重定向到mtv之后调用doLogin可以获取到全局门票。
1、不同的顶级域名之间的cookie是不能够共享的,所以cas和另外两个系统都是独立的cookie
2、用户随便访问一个外部系统,进入到cas;如果用户从来没有访问cas,则第一次访问会要求登录,此时就会create一个cas的cookie,存入到用户的浏览器中,并且会存入到redis中,和全局门票绑定,以及临时票据的create和回传
3、此时外部系统获得回传过来的userVO,便完成了登录
4、之后用户再访问另一个外部系统,同样会进入到cas,但是此时已有了cookie,并且全局门票和redis中的用户信息全部都能够对上,则表明用户已经验证登录过。此时便直接create临时票据并回传
5、那另一个外部系统也就获得了userVO,便实现了SSO
Sso下的cookie代表是全局,代表用户登录过。其他各自的事和自己系统有关的。你可以看一下cookie设置。每个域名下都有。意思就是在sso登陆过有cookie就代表登录过了,其他系统过来是检验一下,虽然是从别的域名跳过来,但是本身sso域名下就有cookie了。
提一个小建议,如果对cookie,request,response不清楚嗯,先去看看javaweb这一块内容,慕课网的免费视频里都有。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星