Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Web应用程序中,将特定于用户的数据存储在静态变量中是否可行_Java - Fatal编程技术网

Java 在Web应用程序中,将特定于用户的数据存储在静态变量中是否可行

Java 在Web应用程序中,将特定于用户的数据存储在静态变量中是否可行,java,Java,我正在开发一个WebApplication,一次可以有近7000个用户同时访问 因此,在这个Web应用程序中,我使用以下逻辑 当用户成功登录时,我将在ArrayList中存储与他相关的信息,如图所示 第1类: if(successfullyloggedin) { ArrayList accounts = getInfoForUser(customerId); userinfo.accountsinfor = accounts; } public ArrayList getInfoFor

我正在开发一个WebApplication,一次可以有近7000个用户同时访问

因此,在这个Web应用程序中,我使用以下逻辑

当用户成功登录时,我将在ArrayList中存储与他相关的信息,如图所示

第1类:

if(successfullyloggedin)  
{
ArrayList accounts = getInfoForUser(customerId);
userinfo.accountsinfor  = accounts;
}


public ArrayList getInfoForUser(String custId)
{
ArrayList  users  = getDataFromDatabase();
return users;
}
第2类:

public class UserInfo {
public static ArrayList accountsinfor;
}
第3类:

类别3是一个服务类别,它检查用户是否在场或不打电话

class services 
{


public String MakeCall(String Id)
{

    ArrayList accounts = UserInfo.accountsinfor;

if(!ID.contains(accounts ))
// Throw an Exception
}

else
{
// Its fine 
}
}
请告诉我,我是否可以在一个一次有近7000个用户同时使用的webapplication中使用这个逻辑。 我关心的是使用静态变量


或者,请建议是否更适合继续进行此操作。

因为它是一个web应用程序,我会为每个用户创建一个会话,并将其特定信息放在其中。这就是它的目的


您不需要说明信息是什么:凭据、ACL等。如果您的数据结构选择清楚,就更容易对其进行评论。

不清楚您的arraylist是否包含用户信息或用户列表,如makeCall,在其中查找“ID”

无论如何,在并发环境中将内容存储在静态变量中通常是个坏主意。如果您在web应用程序中,我建议您将用户信息作为属性存储在HttpSession中:


最好的方法是使用HttpSession并让容器为您处理。
只需使用
@SessionScoped
(当然这取决于您使用的框架)为您保存用户信息的类添加注释,让容器为您处理所有事情。而不是进行容易出错的设计;)

最初我想到了这一点,但如果一个用户使用两个LoginID登录,比如在Mozilla中,浏览器会为这两个用户创建相同的sessionId,因此第二个登录用户会覆盖信息。您希望阻止同一用户同时进行两个会话。我无法更改业务功能,作为一个用户,有两个LoginID是正确的,例如JointaccountOK,然后使用它。如果是同一个用户,覆盖了他们自己的信息,那么这就是他们的问题。他们不应该登录两次。也许您还希望有一个合理的会话超时。30分钟对任何人来说都应该足够了。