我有Zuul服务器作为API网关,在sample中有带有Oauth2,ResourceServer1和ResourceServer2的Identity Server
ZuulServer,ResourceServer1和ResourceServer2与Hazelcast进行分布式会话。
以下是我执行的步骤-
Http页面要求将被重定向到身份服务器上的登录页面。使用oauth2对用户进行身份验证。 (返回的jsessionid的路径为“ /”)
在zuul网关接收到身份验证令牌后,使用Hazelcast将身份验证令牌保留在分布式会话中。
在Zuul Gateway的身份验证成功处理程序上,页面被重定向到ResourceServer1上的主页
通过zuul api网关路由了对resourceServer1的网页调用,并且在此网关处添加了auth令牌
在显示主页之前,我在主页控制器内部编写了两个功能
功能1-使用键“ TEST_SESSION”为分布式hazelcast会话设置一个值
功能2-对RestServer进行了对ResourceServer2的调用(在此附加了cookie)
对ResourceServer2的RestTemplate调用是通过Zuul API网关路由的,在此网关中,已附加auth令牌
控件到达ResourceServer2 rest api控制器,并检查了会话值。步骤2中保留的值可用,但步骤6中的值不可用。
此后不久,该主页就会显示在浏览器中(通过ResourceServer1上下文路径返回了一个新会话)
从网页上,通过Zuul API网关对ResourceServer1进行rest api调用,并在此处附加了auth令牌。
控件到达ResourceServer1控制器并返回了期望值。
发现,对于从Web浏览器到ResourceServer1的每个api调用,都为ResourceServer1创建了一个新会话。
过去几周,我一直遇到以下问题。请在这方面帮助我:-
我想让ResourceServer2可以访问由ResourceServer1创建的会话信息。但是我无法在ResourceServer2上获取会话信息,它始终返回null。我已经使用Hazelcast Mancenter检查了Hazelcast服务器,发现该会话是分布式的。
在对资源服务器进行api调用时,如何限制新会话的创建?这在步骤9、10和12中已注意到。请注意,这里我想使用HttpServletReqest.getSession()获取在步骤2和6中创建的会话的值,并创建一个新会话。如果删除代码以获取会话中的值,则不会创建新会话。
预先感谢