下面是教你用 Java 验证服务器登录系统的完整攻略。
1. 了解登录系统的流程
在开始编写验证服务器登录系统的程序之前,我们需要了解登录系统的流程。一般来说,登录系统的流程包含以下几个步骤:
- 用户在客户端界面输入用户名和密码。
- 客户端将用户输入的用户名和密码打包成请求发给服务器。
- 服务器验证用户名和密码是否正确。
- 如果用户名和密码正确,服务器就会在数据库中查找该用户的信息,生成一个唯一的 token 并返回给客户端。
- 客户端将 token 保存下来,以便发起后续的请求。
可以看出,当我们验证服务器登录系统的时候,在客户端我们需要获取用户输入的用户名和密码,接着将其发送到服务器进行验证,最后获得服务器返回的 token。因此,下面我们需要逐步实现这些步骤。
2. 准备工作
在开始编写代码之前,我们需要先准备一些工作:
- 客户端需要使用 Java 的 HttpURLConnection 类来构建登录请求,因此需要导入 java.net 包。
- 服务器需要使用 Java 的 Servlet API 来处理登录请求,因此需要导入 javax.servlet.jar 包。
3. 客户端验证
首先我们要在客户端验证用户名和密码是否正确。这里我们用到了 Java 的 HttpURLConnection 类来构建 HTTP 请求,如下所示:
// 1. 创建 URL 对象
URL url = new URL("http://localhost:8080/login");
// 2. 创建 HttpURLConnection 对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// 3. 构建请求体
String data = "username=" + username + "&password=" + password;
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(data);
writer.flush();
writer.close();
// 4. 检查响应码
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
// 登录成功
// 5. 读取响应体,获取 token
} else {
// 登录失败
}
在上面的代码中,我们首先创建了一个 URL 对象,将其设置为目标服务器的登录地址。接着我们创建了一个 HttpURLConnection 对象,并设置请求方法为 POST,将 DoOutput 设置为 true,以便向服务器发送请求体。然后我们构建了请求体,将用户名和密码以 key1=value1&key2=value2 的形式拼接在一起,最后通过 OutputStreamWriter 将请求体发送出去。
当我们发送完请求之后,还需要检查响应码来确定登录是否成功。如果响应码是 200,说明登录成功,接着可以读取响应体来解析服务器返回的 token。否则登录失败。
4. 服务器验证
接下来,我们需要在服务器端验证用户输入的用户名和密码是否正确。这里我们使用了 Java 的 Servlet API 来处理登录请求,如下所示:
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private Map<String, String> users = new HashMap<>();
public LoginServlet() {
users.put("admin", "admin123");
users.put("test", "test123");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 从请求中读取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2. 验证用户名和密码是否正确
if (users.containsKey(username) && users.get(username).equals(password)) {
// 3. 如果用户名和密码正确,生成 token 并返回
String token = UUID.randomUUID().toString();
response.getWriter().write(token);
} else {
// 登录失败
}
}
}
我们首先在 LoginServlet 中创建了一个 users 变量,用来存储用户名和密码。在构造函数中我们预设了两个用户 admin 和 test。
然后在 doPost 方法中,我们从 HttpServletRequest 中读取用户名和密码,并进行验证。如果用户名和密码正确,我们就生成一个唯一的 token,将其返回给客户端。
需要说明的是,为了方便起见,我们这里并没有使用真正的数据库来存储用户信息,而是直接在代码中预设了两个用户。在实际开发中,我们当然需要使用真正的数据库来存储用户信息。
5. 完整示例
下面我们将上述两段代码整合在一起,构建出完整的验证服务器登录系统的程序:
客户端代码
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class Client {
public static void main(String[] args) throws IOException {
String username = "admin";
String password = "admin123";
// 1. 创建 URL 对象
URL url = new URL("http://localhost:8080/login");
// 2. 创建 HttpURLConnection 对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// 3. 构建请求体
String data = "username=" + username + "&password=" + password;
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(data);
writer.flush();
writer.close();
// 4. 检查响应码
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
// 登录成功
// 5. 读取响应体,获取 token
String token = conn.getResponseMessage();
System.out.println("Token: " + token);
} else {
// 登录失败
System.out.println("Login failed");
}
}
}
服务器端代码
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private Map<String, String> users = new HashMap<>();
public LoginServlet() {
users.put("admin", "admin123");
users.put("test", "test123");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 从请求中读取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2. 验证用户名和密码是否正确
if (users.containsKey(username) && users.get(username).equals(password)) {
// 3. 如果用户名和密码正确,生成 token 并返回
String token = UUID.randomUUID().toString();
response.getWriter().write(token);
} else {
// 登录失败
}
}
}
以上就是教你用 Java 验证服务器登录系统的完整攻略了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:教你用Java验证服务器登录系统 - Python技术站