You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中使用REST API实现身份认证,完成登录GUI跳转需求?

Java + Eclipse 实现登录GUI + REST API身份认证教程

前期环境准备

  • 确保你的Eclipse已经配置好JDK 8及以上版本,可通过Window -> Preferences -> Java -> Installed JREs路径确认配置状态
  • 新手推荐直接导入jar包使用依赖,无需配置Maven:需要准备okhttp(HTTP请求工具)和jackson-databind(JSON解析工具)的jar包,下载完成后右键你的Java项目 -> 选择Build Path -> Add to Build Path即可完成依赖导入
  • 如果你不想引入第三方依赖,也可以使用JDK自带的HttpURLConnection完成接口请求,用JSONObject做JSON解析,功能完全一致

第一步:编写登录GUI界面(Swing实现)

Swing是Java自带的GUI框架,无需额外导入依赖,对新手非常友好,示例代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginFrame extends JFrame {
    // 用户名输入框
    private JTextField usernameField;
    // 密码输入框
    private JPasswordField passwordField;
    // 错误提示标签
    private JLabel tipLabel;

    public LoginFrame() {
        // 窗口基础配置
        setTitle("用户登录");
        setSize(350, 220);
        // 关闭窗口即退出程序
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 窗口启动时居中显示
        setLocationRelativeTo(null);

        // 用网格布局排列控件,留边距
        JPanel mainPanel = new JPanel(new GridLayout(3, 2, 10, 10));
        mainPanel.setBorder(BorderFactory.createEmptyBorder(25, 25, 25, 25));

        // 用户名行控件
        mainPanel.add(new JLabel("用户名:"));
        usernameField = new JTextField();
        mainPanel.add(usernameField);

        // 密码行控件
        mainPanel.add(new JLabel("密  码:"));
        passwordField = new JPasswordField();
        mainPanel.add(passwordField);

        // 登录按钮+提示行
        JButton loginBtn = new JButton("立即登录");
        mainPanel.add(loginBtn);
        tipLabel = new JLabel("", SwingConstants.CENTER);
        tipLabel.setForeground(Color.RED);
        mainPanel.add(tipLabel);

        add(mainPanel);

        // 绑定登录按钮点击事件
        loginBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                handleLogin();
            }
        });
    }

    // 登录逻辑处理
    private void handleLogin() {
        String username = usernameField.getText().trim();
        String password = new String(passwordField.getPassword()).trim();

        // 前端非空校验
        if (username.isEmpty() || password.isEmpty()) {
            tipLabel.setText("用户名和密码不能为空");
            return;
        }

        // 调用认证接口校验账号密码
        boolean isLoginSuccess = AuthService.checkLogin(username, password);
        if (isLoginSuccess) {
            JOptionPane.showMessageDialog(this, "登录成功,即将进入系统");
            // 关闭当前登录窗口
            this.dispose();
            // 打开主界面窗口
            new MainSystemFrame().setVisible(true);
        } else {
            tipLabel.setText("用户名或密码错误");
        }
    }

    // 程序入口
    public static void main(String[] args) {
        // Swing界面操作必须放在事件调度线程执行,避免渲染异常
        SwingUtilities.invokeLater(() -> {
            new LoginFrame().setVisible(true);
        });
    }
}

第二步:实现REST API身份认证逻辑

编写专门的认证服务类,调用后端登录接口完成身份校验,示例代码如下:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;
import java.io.IOException;

public class AuthService {
    // 替换为你实际的后端登录接口地址
    private static final String LOGIN_API = "http://你的后端接口地址/api/auth/login";
    private static final OkHttpClient HTTP_CLIENT = new OkHttpClient();
    private static final ObjectMapper JSON_MAPPER = new ObjectMapper();

    public static boolean checkLogin(String username, String password) {
        try {
            // 构造JSON格式的请求参数
            String requestParam = JSON_MAPPER.createObjectNode()
                    .put("username", username)
                    .put("password", password)
                    .toString();

            // 构造POST请求
            Request request = new Request.Builder()
                    .url(LOGIN_API)
                    .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), requestParam))
                    .build();

            // 执行请求并解析响应
            try (Response response = HTTP_CLIENT.newCall(request).execute()) {
                // 接口请求失败直接返回登录失败
                if (!response.isSuccessful()) return false;
                String responseContent = response.body().string();
                JsonNode responseJson = JSON_MAPPER.readTree(responseContent);
                // 此处要根据你的后端接口实际返回结构调整判断逻辑
                // 示例假设接口返回code为200即代表登录成功
                return responseJson.get("code").asInt() == 200;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
}

第三步:编写主GUI界面

登录成功后跳转的主界面示例代码如下,你可以根据自己的需求扩展功能:

import javax.swing.*;

public class MainSystemFrame extends JFrame {
    public MainSystemFrame() {
        setTitle("系统主界面");
        setSize(700, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        // 示例仅添加欢迎文本,可自行添加菜单、表格等其他控件
        add(new JLabel("欢迎使用本系统", SwingConstants.CENTER));
    }
}

新手开发注意事项

  • 所有和Swing界面更新相关的代码都要放在SwingUtilities.invokeLater()中执行,避免出现界面卡顿、控件渲染异常的问题
  • 上面的示例为了简化逻辑直接在事件监听线程发送接口请求,实际开发建议新开子线程发送请求,请求结束后再回到事件调度线程更新界面,避免点击登录后界面假死
  • 密码不要明文传输给后端接口,建议加密后再发送,提升安全性
  • 导入第三方jar包时注意和你使用的JDK版本兼容,避免出现类找不到的运行时错误

内容的提问来源于stack exchange,提问作者Dark Load

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:15:03