作者回复: 你们只是做了认证,很多时候还需要通过Session共享一些东西。其实大家套路差不多,你们是自己一个Token存Redis,Session是拿jsessionid作为KEY存了内容到Redis。
作者回复: 先回答1吧,不同域名的Cookie是不一样的,如果是不同二级域名,你可以把这个SessionId放到一级域名的Cookie里。假设,我们要做个认证的系统,同时为不同域名的系统提供统一登录(就是SSO或Passport),那其实就是跳转另一个系统时,我把自己的Token带过去,它那里收到了之后拿这个Token再去换个自己的Token,这些Token在系统里都能对应到同一个身份,再对应到一份会话数据上。建议分布式Session里放的东西越少越好。
作者回复: OAuth和JWT和我们在说的分布式Session不是一个话题诶……
作者回复: JWT就是另外一个话题了,Spring也提供了一些支持,可以看看spring-security-jwt。失效时间也是可以设置的,server.servlet.session.timeout就是干这个的。
作者回复: 恩,你理解的差不多
作者回复: 可能你问题描述的还不是很清楚,不明白你想保存的用户信息是指什么,如果只是登录状态等信息,其实未必要分布式Session,如果你是想要保存什么时候凑齐了5个人,这个房间当前的状态,可以考虑用Redis或者数据库,Redis可能更合适点。
作者回复: 一般我们只在前端系统,与用户浏览器交互的地方加权限什么的。看你的描述,单体应用是对浏览器的,那你的Spring Cloud Gateway也是外部可访问的?应该是单体应用去访问它的吧,那这个Gateway不直接面向用户,它后面的系统就更远了。它不应该会影响到单体应用上的Session才对。我们是不是仔细想想为什么走REST调用后端后前端的Session会变,再来想怎么解决。
作者回复: Spring Boot做了很多自动配置,所以用了Spring Boot很多东西都可以不用加了。
作者回复: 你用Chrome的开发者工具看看网络请求,里面的Cookie,看看SESSION内容是否发生了变化,如果变了,那就是另一个HttpSession了,可以在Redis里看到又多了一组。
作者回复: 这个是不一样的,JWT更多的还是偏向身份认证,JSON Web Tokens。分布式Session是让你在集群中共享会话,你认证后还是有可能会需要使用分布式Session的。