zoukankan      html  css  js  c++  java
  • 也谈单点登录之WEB START(网页内启动)

    说到单点登录,往往是和Portal(门户)是离不开的。通常企业中会有许多应用,WEB的或CS的。而做Portal的时候往往是做成WEB的。这时候,用户登录Portal后,如何从Portal启动本地的CS程序,就成为需要解决的问题。

    不知道大家是如何解决的,我的做法是,自己实现一个协议(就象迅雷/电驴/网络蚂蚁那样),在Portal上实现一个形如

    协议名称://应用名称/作业?action=动作&param1=参数1&param2=参数2…

    这样的例子可能是(我们协议名是用公司简称,这里我就用foo):

    <a href=”foo://erp/order?action=query&owner=hydonlee”>我的订单</a>

    通过这样的设计,让浏览器象处理http协议的链接一样,把请示发送给我们的应用。

    那如何让浏览器将这个链接发送给我们的协议处理器呢?这就需要向系统中注册一下(Windows下),注册表如下:

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\foo]
    @="URL: foo Application 协议"
    "URL Protocol"=""
    
    [HKEY_CLASSES_ROOT\foo\DefaultIcon]
    @="d:\\workspace\\fooPortal\\bin\\client\\foo.protocolhandler.exe,1"
    
    [HKEY_CLASSES_ROOT\foo\shell]
    
    [HKEY_CLASSES_ROOT\foo\shell\open]
    
    [HKEY_CLASSES_ROOT\foo\shell\open\command]
    @="\"d:\\workspace\\fooPortal\\bin\\client\\foo.protocolhandler.exe\" \"%1\""
    

    怎么样?是不是很简单?其实将这个加入注册表之后,你可以开始->运行,输入:foo://test/ 回车,来测试你的协议处理器了!windows系统会把网址作为参数提供给命令行。

    注册协议处理器的C#代码如下,我是写在协议处理器的类中的:

    private void FooProtocolRegister() {
        // copyright(c) hydonlee, 转载请注明原址
        RegistryKey cr = Registry.ClassesRoot;
    
        RegistryKey Fookey = cr.CreateSubKey("Foo");
    
        //添加Foo键
        Fookey.SetValue("", "URL: Foo Application 协议");
        Fookey.SetValue("URL Protocol", "");
    
        //添加DefaultIcon
        RegistryKey iconKey = Fookey.CreateSubKey("DefaultIcon");
        iconKey.SetValue("", string.Format("{0},1", Application.ExecutablePath.ToLowerInvariant()));
    
        //添加Shell Key
        RegistryKey shellKey = Fookey.CreateSubKey("shell");
        RegistryKey openKey = shellKey.CreateSubKey("open");
        RegistryKey commandKey = openKey.CreateSubKey("command");
        commandKey.SetValue("", string.Format("\"{0}\" \"%1\"", Application.ExecutablePath.ToLowerInvariant()));
    
        Fookey.Close();
    }
    

    这样,由浏览器的链接,已经传递到我们本地的应用中了,剩下的事情就比较简单了。协议处理器分析这个地址,呼叫相应的作业插件,并将参数传入。

    简单来说就是:通过协议地址模型,Portal生成链接->浏览器发起请求->协议处理器分派-->各应用插件启动作业

    // copyright(c) hydonlee, 转载请注明原址
  • 相关阅读:
    [转载]项目风险管理七种武器之引言
    [转载]基于TFS实践敏捷-Scrum模式运用
    [转载]基于TFS实践敏捷-工作项跟踪
    [转载]TFS入门指南
    SVN — subclipse操作指引
    Java 中 方法名或类名 变更 同时 更新 所有引用的 类名或方法名 的解决方案
    Java import javax.servlet 出错
    java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题
    vmware 传输(vmdb)错误-32:pipe:read failed 解决方法
    Web.xml配置详解
  • 原文地址:https://www.cnblogs.com/hydonlee/p/1486529.html
Copyright © 2011-2022 走看看