集成公司内部的多个子系统(兼容B/S和C/S),实现单点登录功能的多系统的统一入口功能...
有一句话也挺有意思的,一直在模仿但从未超越过,文章里的技术也都是相对简单的技术,但是实实在在能解决问题,提高效率。
现在人都懒得瞎折腾,能多简单就多简单,谁都不希望总是做一些重复的工作,我们反复登录多个系统,其实是很头疼的事情,有的系统设计得很友善,有的系统是很糟糕的,我们总是输入用户名、密码、验证码等有时候输入得都有些头大,若只要登录一个系统就可以顺利快速的登录其它N个系统。而且有统一的消息提醒,统一的审批流程,统一的用户,那就很爽了。
我们平时开发各种系统,尽量让系统支持,各种登录方式,那就会用起来很舒服了。
例如,B/S 的支持URL方式登录系统。C/S系统支持 static void Main(string[] args)参数登录,那就很爽了。
C/S 的可以参考 C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试 接着给大家分享一下,通用权限管理系统组件里是如何实现多个系统的集中统一的入口,只登录一次处处畅通了。

上面是运行效果,可以添加任意多个子系统,而且还可以支持C/S B/S,多种登录参数方式,还可以定制,还可以控制菜单的访问权限,不同的人显示不同的菜单。

上图是后台的菜单设计器,可以灵活添加多个子系统,可以排序,可以隐藏停用,也可以设置访问权限。

上图为,传输用户密码的效果,当然还可以按要求传输其他参数,例如工号,用户主键,令牌等等。

上图是传输令牌的设置方法。

这个是执行C/S程序的效果,当然后面可以带参数,就可以实现自动登录。

上图为,自动登录B/S系统的效果图,不需要人工输入用户名密码等等繁琐的步骤进入内部管理系统了。
动态加载菜单的参考代码
2 {
3// 判断是否已经加载过菜单了
4if (mitmAppliction.Tag != null)
5 {
6return;
7 }
8 ToolStripMenuItem mitm = null;
9string moduleCode = string.Empty;
10string id = BaseBusinessLogic.GetProperty(ClientCache.Instance.DTMoule, BaseModuleTable.FieldCode, "Appliction", BaseModuleTable.FieldId);
11if (string.IsNullOrEmpty(id))
12 {
13return;
14 }
15// 从所有的系统菜单里进行循环
16foreach (DataRow dataRow in ClientCache.Instance.DTMoule.Select(BaseModuleTable.FieldParentId + "=" + id.ToString()))
17 {
18// 判断有些特殊的处理,跳过
19 moduleCode = dataRow[BaseModuleTable.FieldCode].ToString();
20if (string.IsNullOrEmpty(moduleCode) || moduleCode.Equals("FrmBusinessCardAdmin") || moduleCode.Equals("FrmCodeGenerator"))
21 {
22continue;
23 }
24// 是否显示的,是否有权限的,才可以访问菜单
25if (this.ModuleIsVisible(moduleCode) && this.IsModuleAuthorized(moduleCode))
26 {
27 id = dataRow[BaseModuleTable.FieldId].ToString();
28 mitm = new ToolStripMenuItem(dataRow[BaseModuleTable.FieldFullName].ToString());
29 mitm.Name = "mitmUrl" + id;
30 mitm.Tag = dataRow[BaseModuleTable.FieldNavigateUrl].ToString();
31 mitm.Click += mitm_Click;
32 mitmAppliction.DropDownItems.Add(mitm);
33 }
34 }
35// 打上已经加载菜单的标志,提高程序效率不反复执行程序
36 mitmAppliction.Tag = "Url";
37 }
打开指定网页程序的参考代码
2 {
3// 这里是获取表单的名称
4string formName = ((ToolStripMenuItem)sender).Name.Substring(4);
5// 这里是获取命名空间
6string assemblyName = BaseSystemInfo.MainAssembly;
7if (((ToolStripMenuItem)sender).Tag != null)
8 {
9 assemblyName = ((ToolStripMenuItem)sender).Tag.ToString();
10 }
11if (formName.Substring(0,3).Equals("Url"))
12 {
13string url = assemblyName;
14if (!string.IsNullOrEmpty(url))
15 {
16 url = url.Replace("{UserCode}", this.UserInfo.Code);
17 url = url.Replace("{UserName}", this.UserInfo.UserName);
18 url = url.Replace("{Password}", this.UserInfo.Password);
19 url = url.Replace("{UserId}", this.UserInfo.Id);
20 url = url.Replace("{OpenId}", this.UserInfo.OpenId);
21 System.Diagnostics.Process.Start(url);
22 }
23return;
24 }
25// 这里是加载窗体,不会重复加载窗体
26this.LoadChildrenForm(assemblyName, formName, true);
27 }
转载于:https://blog.51cto.com/2347979/1197245
相关文章:

mysql无法远程连接
在mysql的mysql数据库下: select user,host from user;(查看,没有本机的访问权限) grant all privileges on *.* to root"xxx.xxx.xxx.xxx" identified by "密码";(xx为本机ip,%为所有IP) flush privileges; select user,host from …

哈希表的分类,创建,查找 以及相关问题解决
总体的hash学习导图如下: 文章目录定义分类字符hash排序hash链式hash(解决hash冲突)创建链式hash查找指定数值STL map(hash)哈希分类 完整测试代码应用(常见题目)1. 回文字符串(Longest Palindrome&#x…

android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条
本篇文章介绍自定义View配合属性动画来实现如下的效果实现思路如下:根据播放按钮的图片大小计算出圆形进度条的大小根据音频的时间长度计算出圆形进度条绘制的弧度通过Handler刷新界面来更新圆形进度条的进度具体实现过程分析:首先来看看自定义View中定义…

jsp error-page没有生效
1、首页检查web.xml中的配置,确保路径是正确的 <error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> 2、然后再检查error.jsp文件内容是否有问题,比如只有<head>&…

CTO(首席技术官)
CTO(首席技术官)英文Chief Technology Officer,即企业内负责技术的最高负责人。这个名称在1980年代从美国开始时兴。起于做很多研究的大公司,如General Electric,AT&T,ALCOA,主要责任是将科…

把数组排成最小的数
题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路 一 需要找到字典序最小的哪个排列…

shell脚本自动执行,top命令无输出
shell脚本在系统启动时推后台自动执行,发现其中/usr/bin/top -n 1 -c -b -u ceph 命令并无输出 但是系统启动之后手动执行脚本,&推后台脚本中的top仍然能够正常输出,仅仅是系统发生重启,该功能就不生效了 stackoverflow 推荐…

0709 C语言常见误区----------函数指针问题
1.函数指针的定义 对于函数 void test(int a, int b){ // } 其函数指针类型是void (* ) (int , int), 注意这里第一个括号不能少, 定义一个函数指针,void (* pfunc)(int , int) ,其中pfunc就是函数指针类型, 它指向的函数类型必须…

android 定时换图片,android 视频和图片切换并进行自动轮播
刚入android没多久,遇到的比较郁闷的问题就是子线程主线程的问题,更改UI界面,本想做一个图片的轮播但是比较简单,然后就试试实现视频跟图片切换播放进行不停的循环播放。也用过不少控件,但是知其然不知其所以然&#x…

Win8:Snap 实现
Win8允许分屏的操作,所以我们必须让我们App能对Snap模式视图做出反应,这样也便于通过Store的审核。如果项目中在Snap展现的功能不大,我们可以仅用一张logo代替,类似系统的商店应用。 我的项目实现效果: 实现思路是在你…

ping命令使用及其常用参数
PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量检查网络是否连通,可以很好地帮助我们分析和判定网络故障。Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议;回声请求消…

g-gdb工具使用图谱(持续更新)
如下为整个GDB的学习导图

android bitmap 转drawable,android Drawable转换成Bitmap失败
错误代码:08-07 06:42:30.482 28497-28497/app.tianxiayou E/AndroidRuntime﹕ FATAL EXCEPTION: mainProcess: app.tianxiayou, PID: 28497java.lang.RuntimeException: Unable to start activity ComponentInfo{app.tianxiayou/app.tianxiayou.AppInfoActivity}: …

微软职位内部推荐-Software Development Engineer II
微软近期Open的职位:Job Title:Software Development EngineerIIDivision: Server & Tools Business - Commerce Platform GroupWork Location: Shanghai, ChinaAre you looking for a high impact project that involves processing of billions of dollars, hundreds of …

Lync与Exchange 2013 UM集成:Exchange 配置
有点长时间没有更新文章了,也是由于工作的原因确实忙不过来,好在博客上还有这么多朋友支持,非常的欣慰啊。很久没有给大家带来新东西,真的非常抱歉,今天跟大家带来的是Lync Server 2013与Exchange Server 2013统一消息…
「Java基本功」一文读懂Java内部类的用法和原理
内部类初探 一、什么是内部类? 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限&#…

从一致性hash到ceph crush算法演进图谱(持续更新)
参考文档: https://ceph.com/wp-content/uploads/2016/08/weil-crush-sc06.pdf Ceph剖析:数据分布之CRUSH算法与一致性Hash

[原]unity3d之http多线程异步资源下载
郑重声明:转载请注明出处 U_探索 本文诞生于乐元素面试过程,被面试官问到AssetBundle多线程异步下载时,愣了半天,同样也被深深的鄙视一回(做了3年多u3d 这个都没用过),所以发誓要实现出来填补一…

android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...
Android自动播放Banner图片轮播效果先看一下效果图支持本地图片以及网络图片or本地网络混合。使用方式:android:id"id/banner"android:layout_width"match_parent"android:layout_height"230dip">核心代码:int length …

mongodb 入门
在NOSQL的多个数据库版本中,mongodb相对比较成熟,把学mongodb笔记整理在这,方便以后回顾。这笔记预计分三部分: 一,基础操作,二、增删改查详细操作,三、高级应用。一、在linux在安装mongodb,在linux下安装m…

springboot 学习笔记(三)
(三)用jar包启动springboot项目 1、首先需要在pom文件中添加依赖,spring-boot-starter-parent包含有打包的默认配置,如果要修改的话要可以进行重新定义,具体内容参考https://docs.spring.io/spring-boot/docs/2.1.1.RE…

搜索:深搜/广搜 获取岛屿数量
题目描述: 用一个二维数组代表一张地图,这张地图由字符“0”与字符“1”组 成,其中“0”字符代表水域,“1”字符代表小岛土地,小岛“1”被 水“0”所包围,当小岛土地“1”在水平和垂直方向相连接时…

2.4.4.1、Django新建APP(acounts)
$django-admin.py startapp accounts 在oss/accounts修改forms.py(新建)和views.py如下: 注:绿字部分为注释 views.py ################################################################ #codingutf-8 from django.core.urlresolvers import reverse f…

vue html引入资源dev下404,webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)...
最近在使用webpack vue做个人娱乐项目时,发现npm run build后,css js img静态资源文件均找不到路径,报404错误。。。网上查找了一堆解决办法,总结如下一、首先修改config目录下的index.js文件将其中build的配置项assetsPublicPat…

解决.net webservice的WebClient或HttpWebRequest首次连接缓慢问题
【编程环境】Visual Studio 2010, NET4.0 【开发语言】C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 【问题描述】 使用HttpWebRequest抓取网页内容,但首次请求总是莫名奇妙的阻塞在Request.GetResponse();上,不过一旦这次请求成功,后续的操作就很快了…

2019-1-11
unique的使用: 1. unique是把相邻的重复元素放到最后面。所以在对无序数列使用之前,需要用sort先排序。 2.unique的返回值是不重复区的的最后一个元素加一的地址。 sort(V.begin(), V.end() ); vector<int>::iterator end_unique uniqueÿ…

搜索:广搜 词语阶梯
问题描述以及解决过程如下导图 广搜实现如下 #include <iostream> #include <algorithm> #include <vector> #include <string> #include <queue> #include <set> #include <map>using namespace std;/*判断两个单词是否有连接状态…

float属性html,详解CSS样式中的float属性
详解CSS样式中的float属性。float是 css样式的定位属性。我们在印刷排版中,文本可以按照需要围绕图片。一般把这种方式称为“文本环绕”。在网页设计中,应用了CSS的float属性的页面元素就像在印刷布局里面的被文字包围的图片一样。浮动的元素仍然是网页流…
机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败...
做机房收费系统的时候,首先在SQL server数据库中添加好charge数据库(在对象资源管理器中,右击数据库,点击附加,找到charge的mdf文件,点击确定),然后用ODBC配置好数据库,把…

JQuery新浪1630个表情插件
1.http://***/Detail.aspx?id131 2.http://***/Detail.aspx?id81转载于:https://www.cnblogs.com/zrp2013/archive/2013/05/17/3082961.html