Zuul API网关和资源服务器之间的HazelCast会话共享

时间:2019-06-14 13:28:17

标签: oauth-2.0 hazelcast netflix-zuul spring-session api-gateway

SCENERIO

我有Zuul服务器作为API网关,在sample中有带有Oauth2,ResourceServer1和ResourceServer2的Identity Server

ZuulServer,ResourceServer1和ResourceServer2与Hazelcast进行分布式会话。

以下是我执行的步骤-

    zuul服务器上的
  1. Http页面要求将被重定向到身份服务器上的登录页面。使用oauth2对用户进行身份验证。 (返回的jsessionid的路径为“ /”)

  2. 在zuul网关接收到身份验证令牌后,使用Hazelcast将身份验证令牌保留在分布式会话中。

  3. 在Zuul Gateway的身份验证成功处理程序上,页面被重定向到ResourceServer1上的主页

  4. 通过zuul api网关路由了对resourceServer1的网页调用,并且在此网关处添加了auth令牌

  5. 在显示主页之前,我在主页控制器内部编写了两个功能

  6. 功能1-使用键“ TEST_SESSION”为分布式hazelcast会话设置一个值

  7. 功能2-对RestServer进行了对ResourceServer2的调用(在此附加了cookie)

  8. 对ResourceServer2的RestTemplate调用是通过Zuul API网关路由的,在此网关中,已附加auth令牌

  9. 控件到达ResourceServer2 rest api控制器,并检查了会话值。步骤2中保留的值可用,但步骤6中的值不可用。

  10. 此后不久,该主页就会显示在浏览器中(通过ResourceServer1上下文路径返回了一个新会话)

  11. 从网页上,通过Zuul API网关对ResourceServer1进行rest api调用,并在此处附加了auth令牌。

  12. 控件到达ResourceServer1控制器并返回了期望值。

  13. 发现,对于从Web浏览器到ResourceServer1的每个api调用,都为ResourceServer1创建了一个新会话。

问题

过去几周,我一直遇到以下问题。请在这方面帮助我:-

  1. 我想让ResourceServer2可以访问由ResourceServer1创建的会话信息。但是我无法在ResourceServer2上获取会话信息,它始终返回null。我已经使用Hazelcast Mancenter检查了Hazelcast服务器,发现该会话是分布式的。

  2. 在对资源服务器进行api调用时,如何限制新会话的创建?这在步骤9、10和12中已注意到。请注意,这里我想使用HttpServletReqest.getSession()获取在步骤2和6中创建的会话的值,并创建一个新会话。如果删除代码以获取会话中的值,则不会创建新会话。

预先感谢

0 个答案:

没有答案