我正在通过servlet调用Java后端,并且每次调用API时都需要提供密码和用户名。我可以将用户密码/用户名保存在变量中,以便每次用户调用API时都可以使用它吗?
如果有多个用户,是否会覆盖变量?
整体问题或许是:每个用户是否都会获得新的“新”servlet,或者之前是否从用户那里保存了数据?
答案 0 :(得分:2)
出于性能原因共享Servlet,因此它们应该是无状态的(或者是线程安全的,但是你只需要重新发明轮子)。如果您需要与用户保持状态,请将其放入HttpSession
。
答案 1 :(得分:0)
每个用户都会获得新的“新”servlet,或者是从中保存的数据 用户之前?
Servlet实例只会创建一次(除非你做的事情不同,比如使用SingleThreadModel
)&由容器维护(如Tomcat等),即所有请求都将使用/共享一个servlet实例。
因此,不要使用servlet的实例变量来存储任何数据。
我可以将用户密码/用户名保存在变量中,以便我可以使用它 每次用户调用API?
您不应该将用户ID和密码保存到JVM(RAM)内存中,因为在JVM关闭时会丢失所有数据,因此您需要使用一些持久性存储像数据库(更喜欢这个)或文件系统。
答案 2 :(得分:0)
如果使用静态变量,则变量在用户之间共享。此外,这是一个并发问题,你需要处理它。如果变量不是静态的,那么每个用户都会有一个被排除的实例。
无论如何,如果你想存储一些信息并且想要在将来当特定用户调用servlet时检索它们,那么通常使用HttpSession。另外,请考虑您需要在客户端中获取http cookie并将其发送到服务器以进行进一步调用。
此外,服务器为每个客户端提供API密钥的常见情况也是如此。然后每当客户想要调用API时;有必要通过特定的http标头发送密钥。
如果您不在服务器和客户端之间使用HTTPS之类的安全连接,则上述方案会出现一些安全问题。