我正在用Java编写一个XmlRcp服务器,并且我正在尝试使用ArrayList跟踪有效令牌,但出于某种原因,在从客户端到服务器到ArrayList的调用之间重新创建/清空并且没有任何内容。
客户端首先通过将密码传递给服务器来连接到服务器以请求令牌。如果密码正确,服务器会向客户端返回一个令牌,并将该令牌添加到已验证令牌的ArrayList中。然后,客户端发送另一个请求,将消息添加到服务器上不同的字符串ArrayList,但无法验证客户端的令牌,因为持有令牌的ArrayList现在为空。有谁知道为什么会这样?
用于响应客户端调用的两种方法如下所示。
static MessageHandler mess = new MessageHandler(); //has a MessageHander, which is essential and ArrayList of strings that can add a message or get all
static TokenHandler th = new TokenHandler(); //private class that keeps a list of valid tokens to check against - located within this class
public String getAuthToken(String uid, String password) {
if(!password.equals("test123")){ //tests if the password is correct, if not it doesn't send a token.
System.out.println("User entered invalid password.");
return "You must enter a valid password to receive a token.";
}
System.out.println("uid: " + uid);
String token = uid + " 10011";
th.addToken(token);
System.out.println("User given token: " + token);
return token;
}
public String storeMessage(String token, String Message) {
//validate token
if(th.validateToken(token)){ //if valid token, then store the message
System.out.println("msg=" + Message);
mess.addMessage(Message);
return "Message succesfully stored.";
} else { //if the token passed was not valid, then don't store the message.
return "Invalid token - message could not be stored.";
}
}
答案 0 :(得分:1)
每次有新请求时都会重新创建TokenHandler
个实例(google"请求范围与会话范围")。为了在调用之间保持状态(保存数据),您应该将其保存到数据库中并添加逻辑以恢复它。
另一种方法是让客户端保存数据。饼干。