我目前的项目中遇到了一个奇怪的问题:
我在Glassfish 3.1服务器上部署了多个基于Spring MVC的Web应用程序 - 我需要能够根据各自web.xml中的“sesion timeout”参数“超时”用户 - 无论是用户所在的应用程序。请不要问为什么应用程序在单独的WAR中 - 架构是这样的。用户通过WebApp A登录并重定向到WebApp B - 然后用户可以继续跳转到不同的Web应用程序 - 我想你明白了。 WebAppB等也有很多Ajax调用(我甚至不去那里)。问题,我想,归结为我无法在WebApp A和WebApp B之间共享会话数据(我可能在这里错了 - 这是我需要帮助的地方)所以我没有通过检查知道的方式
httpServletRequest.getSession(false)
在WebAppB中,因为它在第一个请求到达WebAppB并且第一个请求“在”会话超时之后的两种情况下都返回null。我必须在WebAppA的会话中保留“某些东西”并检查它在WebAppB会话中的存在 - 这让我回到了在Web应用程序中共享会话数据的问题。我无法使用数据库存储,因为这意味着每次请求都会调用数据库。我通过谷歌搜索得到了一个方向,Tomcat中的“crossContext”事情在这种情况下有所帮助 - 但这样的事情会对Glassfish有帮助(我最近发现了sun-web-app.xml的“crossContextAllowed”属性)。
我已经坚持了很长一段时间了,我甚至不确定这是一个值得你花时间的问题 - 所以提前感谢你们提供帮助。
特里舒尔
答案 0 :(得分:1)
我无法帮助您实现Glassfish,但您需要的是webapps之间的单点登录形式。
要实现这种形式的SSO,您通常需要做两件事:
Servlet / JavaEE容器通常提供SSO Realms / SessionManagers或同等产品的样本,这些样本将直接实现您的需求,或者您可以根据需要进行微调。