java - 如何向现有 Java Swing 程序添加登录屏幕?

标签 java swing security user-interface

我已经有了一个非常基本的 Java Swing 程序,但意识到我可以使用一个简单的用户名/密码登录屏幕来限制只有拥有用户名和密码的人才能访问它。

无论如何,我是否可以在主方法的开头插入一些代码,以防止在出现的屏幕上输入用户名和密码之前执行超出该方法的代码?

最佳答案

这是登录对话框的示例。通过关闭对话框来关闭整个程序。

Username: stackoverflow Password: stackoverflow

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

public class TestFrame extends JFrame {

    private PassWordDialog passDialog;

    public TestFrame() {
        passDialog = new PassWordDialog(this, true);
        passDialog.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new TestFrame();
                frame.getContentPane().setBackground(Color.BLACK);
                frame.setTitle("Logged In");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationRelativeTo(null);
                frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            }
        });
    }
}

class PassWordDialog extends JDialog {

    private final JLabel jlblUsername = new JLabel("Username");
    private final JLabel jlblPassword = new JLabel("Password");

    private final JTextField jtfUsername = new JTextField(15);
    private final JPasswordField jpfPassword = new JPasswordField();

    private final JButton jbtOk = new JButton("Login");
    private final JButton jbtCancel = new JButton("Cancel");

    private final JLabel jlblStatus = new JLabel(" ");

    public PassWordDialog() {
        this(null, true);
    }

    public PassWordDialog(final JFrame parent, boolean modal) {
        super(parent, modal);

        JPanel p3 = new JPanel(new GridLayout(2, 1));
        p3.add(jlblUsername);
        p3.add(jlblPassword);

        JPanel p4 = new JPanel(new GridLayout(2, 1));
        p4.add(jtfUsername);
        p4.add(jpfPassword);

        JPanel p1 = new JPanel();
        p1.add(p3);
        p1.add(p4);

        JPanel p2 = new JPanel();
        p2.add(jbtOk);
        p2.add(jbtCancel);

        JPanel p5 = new JPanel(new BorderLayout());
        p5.add(p2, BorderLayout.CENTER);
        p5.add(jlblStatus, BorderLayout.NORTH);
        jlblStatus.setForeground(Color.RED);
        jlblStatus.setHorizontalAlignment(SwingConstants.CENTER);

        setLayout(new BorderLayout());
        add(p1, BorderLayout.CENTER);
        add(p5, BorderLayout.SOUTH);
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        addWindowListener(new WindowAdapter() {  
            @Override
            public void windowClosing(WindowEvent e) {  
                System.exit(0);  
            }  
        });


        jbtOk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if ("stackoverflow".equals(String.valueOf(jpfPassword.getPassword()))
                        && "stackoverflow".equals(jtfUsername.getText())) {
                    parent.setVisible(true);
                    setVisible(false);
                } else {
                    jlblStatus.setText("Invalid username or password");
                }
            }
        });
        jbtCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
                parent.dispose();
                System.exit(0);
            }
        });
    }
}

关于java - 如何向现有 Java Swing 程序添加登录屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908275/

相关文章:

python - Python.requests 安全吗?

java - 如何在 Java 8 中将 DH key 大小扩展到 2048

java - 如何从另一个Java类中的JTextfield读取用户输入

java - 当有其他窗口时,第一个 NewtCanvasAWT 中的第一个 GLWindow 不会得到 .repaint()

java - AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException : -1

java - Maven Release Plugin 不更新 dependencyManagement 中的 SNAPSHOT

security - log4javascript 是否容易受到 Apache Log4j(Java 日志库)远程代码执行 CVE-2021-44228 的影响?

java - 使用字符数组反转字符串

java - 在 Eclipse 中查看类层次结构的快捷方式

Java正则表达式解释