Winform开发框架之系统重新登录、自动登录实现

在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理多个用户账号,希望通过不同的账号登录进行管理不同的资料,另一种情况是酒店的换班操作,另一个人接替前面的人进行系统维护管理。这种重新登录其实也是一种友好的操作之一,试想一下,换个账号登录,就需要推出系统,重新寻找运行程序才可以,而且如果系统启动较慢一点的,还需要等待,所以实现重新登录,有时候也是必要的。因此实现这个功能,也是体现我们开发的系统注重细节的表现。

另外,自动登录(其实是接受通过命令行参数进行登录)也是很常见的,有时候,让客户端记住用户的账号密码,我们在后台通过调动命令行方式进行登录,让系统程序接收到相关的参数值即可进行登录了。

1、系统重新登录实现

大致的思路,就是登录系统后,在系统菜单中有一项重新登录的功能入口,单击可以要求客户重新输入密码进行登录,如下所示。

代码实现就是通过把初始化的时候,用户相关的操作放到一个函数里面,保证重新执行这个函数操作就能重新刷新登录用户信息即可。如下所示。

在InitUserRelated函数里面,我们把用户相关的初始化操作放在里面,其中包括显示登录用户信息、用户可操作按钮或者菜单、首页信息等相关项目,代码如下所示。

        /// <summary>
        /// 初始化用户相关的系统信息
        /// </summary>
        private void InitUserRelated()
        {
            ChildWinManagement.LoadMdiForm(this, typeof(FirstPage));//欢迎页面

            #region 初始化系统名称
            try
            {
                string Manufacturer = config.AppConfigGet("Manufacturer");
                string ApplicationName = config.AppConfigGet("ApplicationName");
                string AppWholeName = string.Format("{0}-{1}    ", Manufacturer, ApplicationName);
                Portal.gc.gAppUnit = Manufacturer;
                Portal.gc.gAppMsgboxTitle = AppWholeName;
                Portal.gc.gAppWholeName = AppWholeName;

                this.Text = AppWholeName + "      ";
                this.notifyIcon1.BalloonTipText = AppWholeName;
                this.notifyIcon1.BalloonTipTitle = AppWholeName;
                this.notifyIcon1.Text = AppWholeName;

                string userName = Portal.gc.LoginInfo.RealName;
                if (string.IsNullOrEmpty(userName))
                {
                    userName = Portal.gc.LoginInfo.Name;
                }
                UserStatus = string.Format("当前用户:{0}({1})", userName, Portal.gc.RoleInfo.RoleName);
                CommandStatus = string.Format("欢迎使用 {0}", Portal.gc.gAppWholeName);
            }
            catch { }

            #endregion

            InitAuthorizedUI();//根据权限屏蔽

            InitSkinGallery();
            UserLookAndFeel.Default.SetSkinStyle("Office 2010 Blue");
        }

其中InitAuthorizedUI就是判断用户有哪些权限的函数,根据权限系统获取到的功能点,在这里对界面元素进行重新刷新,有权限的就显示,没有的就隐藏即可,如下所示。

        /// <summary>
        /// 根据权限屏蔽功能
        /// </summary>
        private void InitAuthorizedUI()
        {
            this.tool_Report.Enabled = Portal.gc.HasFunction("Report");
            this.tool_Dict.Enabled = Portal.gc.HasFunction("Dictionary");
            this.tool_ItemDetail.Enabled = Portal.gc.HasFunction("ItemDetail");
            this.tool_Purchase.Enabled = Portal.gc.HasFunction("Purchase");
            this.tool_StockSearch.Enabled = Portal.gc.HasFunction("StockSearch");
            this.tool_TakeOut.Enabled = Portal.gc.HasFunction("TakeOut");
            this.tool_WareHouse.Enabled = Portal.gc.HasFunction("WareHouse");
            //this.menu_run_systemLog.Enabled = Portal.gc.HasFunction("LoginLog");
            this.tool_Settings.Enabled = Portal.gc.HasFunction("Parameters");
            this.tool_MonthlyStatistic.Enabled = Portal.gc.HasFunction("MonthlyStatistic");
            this.tool_AnnualStatistic.Enabled = Portal.gc.HasFunction("AnnualStatistic");
            this.tool_ClearAll.Enabled = Portal.gc.HasFunction("ClearAllData");
            this.tool_ImportItemDetail.Enabled = Portal.gc.HasFunction("ImportItemDetail");
        }

这样封装好后,我们需要重新登录就方便了,我们在重新登录的菜单操作里面,实现代码如下所示。

        private void btnRelogin_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (MessageDxUtil.ShowYesNoAndWarning("您确定需要重新登录吗?") != DialogResult.Yes)
                return;

            Portal.gc.MainDialog.Hide();

            Login dlg = new Login();
            dlg.StartPosition = FormStartPosition.CenterScreen;
            if (DialogResult.OK == dlg.ShowDialog())
            {
                if (dlg.bLogin)
                {
                    CloseAllDocuments();
                    InitUserRelated();
                }

            }
            dlg.Dispose();
            Portal.gc.MainDialog.Show();
        }

实现上面的操作过程,基本上就完成了重新登录的操作了。

2、系统自动登录实现

系统自动登录有时候很必要,在用户自己绝对信任的电脑上,自动登录对用户来说,很方便友好的,君不见,QQ如此、旺旺如此等等。其实实现思路就是通过给exe执行文件传递登录参数即可,必要时登录的参数值还可以进行加密,给第三方进行运行调用,以前就做过一个在Web上自动启动桌面程序Visio应用软件的操作,其实原理就是一样,通过传递参数给执行文件实现的。

        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if (args.Length > 0)
            {
                LoginByArgs(args);
            }
            else
            {
                LoginNormal(args);
            }
        }
       /// <summary>
        /// 使用参数化登录
        /// </summary>
        /// <param name="args"></param>
        private static void LoginByArgs(string[] args)
        {
            CommandArgs commandArgs = CommandLine.Parse(args);
            if (commandArgs.ArgPairs.Count > 0)
            {
                #region 获取用户参数
                string userName = string.Empty;
                string identity = string.Empty;
                foreach (KeyValuePair<string, string> pair in commandArgs.ArgPairs)
                {
                    if ("U".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))
                    {
                        userName = pair.Value;
                    }
                    if ("P".Equals(pair.Key, StringComparison.OrdinalIgnoreCase))
                    {
                        identity = pair.Value;
                    }
                }
                #endregion

                if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(identity))
                {
                    bool bLogin = Portal.gc.LoginByIdentity(userName.Trim(), identity);
                    if (bLogin)
                    {
                        ShowMainDialog();
                    }
                    else
                    {
                        LoginNormal(args);
                    }
                }
            }
        }

有时候,即使觉得用户不需要通过命令行登录,那么我们自己为了避免开发过程中,启动程序时候,总是需要输入用户账号密码的问题,也可以使用模拟自动登录的方式解决。

我们只需要在项目的属性里面输入内置的用户名密码,这样我们测试起来就不用登录那么麻烦了。

以上就是Winform开发框架中对于系统重新登录以及系统自动登录(命令行登录)的思想思路及方式,欢迎大家提供更好的思路及技巧,或者进行探讨,谢谢支持。

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之系统重新登录、自动登录实现,如需转载请自行联系原博主。

时间: 2024-10-07 18:19:31

Winform开发框架之系统重新登录、自动登录实现的相关文章

Windows系统重启后自动登录运行指定的windows程序

网络管理员在维护系统过程中,经常遇到计算机或服务器意外重新启动,这个时候运行在 服务器上的程序会因为重新启动导致程序无法运行,比如摄像头监控程序,等发现服务器等 待你输入用户名和密码的时候,监控程序已经好长时间没有运行了.如何让关键程序在服务 器重新启动后自动登录并且自动运行程序后锁定计算机. 按一下步骤可以实现以上的 功能: (一).计算机重新启动后自动登录系统 您可以使用注册表编辑器添 加您的登录信息.为此,请按照以下步骤操作: 1. 单击「开始」,单击"运行", 键入 reged

win10系统如何实现自动登录

  一.首先使用键盘里的组合键Win+R唤醒运行窗口,接着输入netplwiz打开用户账户的窗口. 二.接着在用户账户的窗口中去掉"要是哦那个本计算机,用户必须输入用户名和密码"的选项. 三.这时候会弹出自动登录的窗口,输入两次密码点击确定即可实现自动登录了.

Win8系统不用输入密码自动登录到桌面的方法

  我们在用Win8的时候,默认情况下每次登陆时都是需要输入用户名和密码的,这样对一些渴望更加便利地使用电脑的用户来说就来得稍显麻烦.那么Win8怎样才能自动登陆呢? 步骤 1.打开运行窗口window键+R 2.输入netplwiz,确定 3.去掉"要使用计算机,用户必须输入用户名和密码"即可 通过上述的设置后,你在今后使用Win8计算机时,便不用再经过输入用户名和密码这个环节了.不过虽然这样更加便利了,但安全性也降低了.大家根据自己的需要作出决定吧.

Win8系统如何管理自动登录的凭据?

  1.鼠标移到屏幕右下角,右方会出现如图所示选项; 2.点击"设置"按钮,打开"控制面板"; 3.左键单击"用户账户和家庭安全"; 4.左键单击"凭据管理器"; 5.在此便可管理你的"凭据"或者"windows凭据".

Windows8系统如何管理自动登录的凭据

  1.鼠标移到屏幕右下角,右方会出现如图所示选项; 2.点击"设置"按钮,打开"控制面板"; 3.左键单击"用户账户和家庭安全"; 4.左键单击"凭据管理器"; 5.在此便可管理你的"凭据"或者"windows凭据".

Winform开发框架之通用自动更新模块

在网络化的环境中,特别是基于互联网发布的Winform程序,程序的自动更新功能是比较重要的操作,这样可以避免挨个给使用者打电话.发信息通知或者发送软件等,要求其对应用程序进行升级.实现程序的自动更新,在后期发布维护过程中,一个可以快速相应修正相关的Bug或者增加功能,二个可以避免给使用客户隔三差五的发送修改好的程序,省心省力.本文也是基于这个思想,在Winform开发框架中再引入一个自动升级更新的通用模块,这个自动升级的通用模块除了具备一般的功能外,可以通过配置程序标题.升级路径方式等方式,实现

java验证用户是否已经登录 java实现自动登录_java

本文为大家分享了java验证用户是否已经登录与实现自动登录的详细代码,供大家参考,具体内容如下 1.验证用户是否已经登录 package cn.hongxin.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletExceptio

Winform开发框架的重要特性总结

从事Winform开发框架的研究和推广,也做了有几个年头了,从最初的项目雏形到目前各种重要特性的加入完善,是经过了很多项目的总结归纳和升华,有些则是根据客户需要或者应用前景的需要进行的完善,整个Winform开发框架具有很好的通用性和借鉴性,本文从该Winform开发框架进行概括总结,力求把各个重要的特性进行一些详细的说明,使大家了解整个Winform开发框架的面貌和特性. Winform开发框架总体性概括有:支持插件化应用开发,能够动态配置及加载开发的插件:菜单支持动态配置,可根据用户权限进行

Winform开发框架之权限管理系统改进经验总结(3)系统登录黑白名单的实现

在一般的权限系统里面,可能经常会看到系统的黑名单或者白名单的拦截功能.在一般权限系统里面 ,常见的黑名单就是禁止用户在某些IP上登录系统,白名单就是允许用户只在某些IP上登录系统.本随 笔主要介绍在我的权限系统里面,如何实现这个黑白名单的功能,以及介绍在其中应用到的IP对比操作 ,IP段判断等操作代码. 1.黑白名单的配置 要完成黑名单的拦截和白名单的放行,我们需要进行名单的配置操作,我们把相关的配置放到列表里 面进行展示,可以添加多个黑名单或者白名单,如下界面所示. 开发框架之权限管理系统改进