在基于Java的Web应用程序的服务器端工作(将为移动和Web客户端提供服务),我需要实现用户身份验证。在生产中,我有2台服务器(重复,使用相同的数据库)和负载均衡器。之前我使用过Spring安全性,所以这对我来说是最直观的方式,但这是我的问题:
Spring安全性一次针对数据库(当用户登录时)对用户进行身份验证,并使用基于会话的令牌处理和验证以后的请求。现在,假设我的一个生产服务器已关闭,那么我正在失去我的会话,这意味着用户将获得某种“未经授权”的响应。我怎么处理这个?
我想到了3个选项
所以这些是我的想法,如果你有,我想了解你的见解和新建议。
答案 0 :(得分:0)
用户在会话中维护的状态如何? 如果您遇到这种情况,那么如果服务器发生故障,您将丢失数据。
我认为最好的方法是从粘性会话机制开始,然后保持身份验证。
可以在负载均衡器上配置Sticky会话,通常表示以下内容: - 一旦IP A的使用在服务器S1上打开您的应用程序,所有后续请求将被重定向到该服务器,但下一个用户将自动连接到服务器S2(负载均衡器将做出这样的决定)。总而言之,如果您有10个用户同时工作,其中5个将连接到服务器S1,其余用户连接到服务器B.
我不认为验证每个请求是一个好主意(想想web 2,ajax请求) - 这将使您的服务器和数据库高度加载,因此它将无法处理大量的用户/请求同时。
希望这有帮助