理解围绕JXLoginPane示例的框架的问题

 双眼皮的猪猪2012 发布于 2022-12-31 13:50

我在WindowBuilder中找到了一个可以JXLoginPane从SwingX中调用的组件,看起来它似乎是我尝试做的一个很好的起点,但我需要更多关于如何使用它的信息.到目前为止,我发现的唯一真正帮助我解决这个问题的是这篇9年前的博客文章.

它得到了我最那里的方式,但也有类似的事情多次提到is.IS_Statics,is.MD5Hashisquote.Main该作者没有提供.我猜这些是他或她为登录创建的类,但我不知道如何为自己创建它们.

我如何充实Ruxton在他的博客上开始的内容?或者,就此而言,有人可以推荐更好的替代方案JXLoginPane吗?

1 个回答
  • 所有答案都取决于您的要求,但最重要的是您了解JXLoginPane它的作用和方式.然后你将能够理解9岁的帖子:

    JXLoginPane:创建一个带有控件的面板,以在基于登录的应用程序中对用户进行身份验证.

    LoginService:必须执行登录逻辑并确定用户身份验证是否有效的抽象基类.它保留了在整个登录过程中LoginListener在LoginEvents上通知的s对象的内部列表:登录启动,取消,成功和失败.

    PasswordStore:用于安全存储用户在某种缓存中键入的密码的抽象类,以帮助 LoginService验证用户.用于存储密码的实际机制由实现决定.

    UserNameStore:与PasswordStore用户名相同.

    LoginListener:此接口提供了一个"监听"当前登录过程并因此而行动的合同.例如,如果同一用户的登录尝试失败5次,则可能会阻止该用户假设某人正在尝试破解该帐户,或者如果登录过程成功,那么如果您有兴趣保留一个新的会话条目,则可以在数据库中创建一个新的会话条目.用户会话的日志表.


    现在快速浏览一下这篇文章,我认为这是一个基于数据库服务的实现与基于首选项的用户名缓存相结合UserNameStore:

    Class is.ISLoginServiceLoginService抽象基类实现.

    Class is.ISUserNameStoreUserNameStore抽象类实现.

    PasswordStore抽象类没有实现.

    Class is.ISLoginListener是一个LoginListener接口实现.

    最后,关于is.IS_Statics,is.MD5Hash并且isquote.Main似乎是该特定项目的实用类,与基本要素无关JXLoginPane.您可能拥有自己的类来帮助您进行登录过程.


    简单的例子

    请考虑这个简单的例子来说明上述概念.你会发现让它运作并不困难.

    注意:没有用户名和密码存储实现.
    注2:请参阅 LoginAdapter

    import java.awt.event.WindowEvent;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import org.jdesktop.swingx.JXLoginPane;
    import org.jdesktop.swingx.auth.LoginAdapter;
    import org.jdesktop.swingx.auth.LoginEvent;
    import org.jdesktop.swingx.auth.LoginListener;
    import org.jdesktop.swingx.auth.LoginService;
    
    public class Demo {
    
        private JFrame frame;
        private String userName;
        private int failedAttemptsCount = 0;
    
        private void showLoginDialog() {
    
            frame = new JFrame("Welcome!");
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    
            final JXLoginPane loginPane = new JXLoginPane();
    
            LoginListener loginListener = new LoginAdapter() {
                @Override
                public void loginFailed(LoginEvent source) {
                    failedAttemptsCount++;
                    String message;
                    switch(failedAttemptsCount) {
                        case 1: message = "Come on buddy! What happened?"; break;
                        case 2: message = "Did you just fail again?"; break;
                        case 3: message = "This is embarrassing..."; break;
                            default: message = "You should probably go home and get some sleep...";
                    }
                    loginPane.setErrorMessage(message);
                }
    
                @Override
                public void loginSucceeded(LoginEvent source) {
                    Demo.this.userName = loginPane.getUserName();
                    Demo.this.createAndShowGui();
                }
            };
    
            LoginService loginService = new LoginService() {
                @Override
                public boolean authenticate(String name, char[] password, String server) throws Exception {
                    return name.equals("Sturm") 
                        && String.valueOf(password).equals("StackOverflow") ;
                }
            };
    
            loginService.addLoginListener(loginListener);
            loginPane.setLoginService(loginService);
    
            JXLoginPane.JXLoginDialog dialog = new JXLoginPane.JXLoginDialog(frame, loginPane);
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setVisible(true);
    
            // if loginPane was cancelled or closed then its status is CANCELLED
            // and still need to dispose main JFrame to exiting application
            if(loginPane.getStatus() == JXLoginPane.Status.CANCELLED) {
                frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
            }
        }
    
        private void createAndShowGui() {
            String welcomeMessage = String.format("Welcome %s ! You have successfuly loged in.", userName);
            JPanel panel = new JPanel();
            panel.add(new JLabel(welcomeMessage));
    
            frame.add(panel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new Demo().showLoginDialog();
                }
            });
        }
    }
    

    2022-12-31 13:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有