权限认证-分布式session替代方案
前面我们了解了Gateway组件的过滤器,这一节我们就探讨一下Gateway在分布式环境中的一个具体用例-用户鉴权。
1、传统单应用的用户鉴权
从我们开始学JavaEE的时候,就被洗脑式灌输了一种权限验证的标准做法,那就是将用户的登录状态保存到HttpSession中,比如在登录成功后保存一对key-value值到session,key是userld而value是用户后台的真实ID。
接着创建一个ServletFilter 过滤器,用来拦截需要登录才能访问的资源,假如这个请求对应的服务端session里找不到userld这个key,那么就代表用户尚未登录,这时候可以直接拒绝服务然后重定向到用户登录页面。
大家应该都对session机制比较熟悉,它和cookie是相互依赖的,cookie是存放在用户浏览器中的信息,而session则是存成在股务器端的。当浏览器发起服务请求的时候就会带上cookie,服务器端接到Request后根据cookie中的jsessionid拿到对应的session。
由于我们只启动一台服务器,所以在登录后保存的session始终都在这台服务器中,可以很方便的获取到 session中的所有信息,用这方法我们一路搞定了各种课程作业和毕业设计,结果一到工作岗位发现行不通了,因为所有应用都是集群部署,在一台机器保存了的session无法同步到其他机器上,那我们有什么成熟的解决方案吗?
2、分布式环境下的解决方案
2.1)同步session
session复制是最容易先想到的解决方案,我们可以把一台机器中的s