我已经使用java,spring和tomcat8作为服务器编写了一个Web应用程序,现在我想写其他的但是这个必须与之前的交互。它必须从数据库和会话中共享一些数据(我的意思是如果用户在一个应用程序中登录,他不需要在其他应用程序中登录)。实现这个的最佳方法是什么?
答案 0 :(得分:0)
这是相当广泛的,但一般来说,您只需对两个应用程序使用相同的数据库配置,并且可以使用会话复制在服务器之间共享会话。 Tomcat有一些内置的功能可以做到这一点,但你也应该考虑fgets
,它挂钩到servlet过滤器链,以跨平台的方式外化会话。
答案 1 :(得分:0)
会话群集有一些解决方案但是由于您在Spring生态系统中,请查看新推出的Spring Session project,这使得此任务变得更加容易,并且也是与webapp提供商无关的。
答案 2 :(得分:0)
通常不建议使用共享会话,因为数据库共享使用JNDI并获取对象。如果要在您的情况下处理登录,请使用单点登录。
答案 3 :(得分:0)
有几种方法可以解决这个问题。 Tomcat支持群集请参阅:https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html 但正如Dimitrisli已经写过的那样,看看春季会议可能是最简单的解决方案(参见:http://projects.spring.io/spring-session/)。
我在我的一个项目中使用它并且它工作得很好,但你必须意识到现在默认的序列化方案是" ObjecStream"这是常规的java序列化。因此,您不能在服务器中使用不同版本的类,而这些类正在放入会话中。这将导致反序列化异常。但我很确定如果你使用tomcat / jboss7glassfish / etc可能会出现同样的问题。群集。
如果您希望在服务部署中免费,您可以使用其中一个群集解决方案,只存储必要的最少信息,例如sessionID,然后使用redis或您喜欢的任何数据库解决方案来存储会话相关数据更多"类演变"友好的格式,例如json。这会为您带来更多的工作,但也会提供更大的灵活性。