在基于 Java 的 Web 应用程序的服务器端工作(将为移动和 Web 客户端提供服务),我需要实现用户身份验证。在生产中,我有 2 台带有负载均衡器的服务器(重复,针对同一个数据库工作)。我之前使用过 Spring 安全性,所以这对我来说是最直观的方式,但这是我的问题:
Spring security 对 DB 进行一次用户身份验证(当用户登录时),然后使用基于会话的令牌处理和验证以后的请求。现在,假设我的一个生产服务器关闭了,然后我失去了我的会话,这意味着用户将得到某种“未经授权”的响应。我该如何处理?
我想到了3个选项
- 使用诸如redis之类的键值对存储并将我的令牌保存在那里。如果我这样做,我想我必须干扰 springs 核心代码 - 一次是在用户登录时(将令牌保存到键值存储),一次是在验证用户时(验证这个键值存储而不是 spring 的 in-内存 HttpSessionSecurityContextRepository)。
- 以一种在每个请求中针对数据库对用户进行身份验证的方式使用 Spring 安全性(我不确定它是否可能)。
- 不使用spring security,而是简单地创建一个过滤器或一些拦截器,以便对数据库的每个请求进行身份验证。这意味着两件事:第一件事是我的客户必须将用户名和密码应用于每个请求(可能在标头中),第二件事是我必须为每个请求查询数据库。
所以这些是我的想法,如果你有这些想法和新建议,我想听听你的见解。