zoukankan      html  css  js  c++  java
  • Excel上使用VBA的WebBrowser控件实现单点登录(SSO)

    需求

    Excel 上可以做出很多漂亮的报表, 产品经理希望能够在Excel上弹出登录页面,实现单点登录,
    登录完成后,从服务器端取回模板列表,选择其中一个模板,插入到Excel中。

    设计

    1. 登录界面可用前端技术实现,比如Angular与VUE
    2. VBA中自带的WebBrowser控件可以作为加载Web登录页面的“壳”。
    3. VBA不断尝试获取页面上的cookie,直到取到cookie,并且cookie中包含token。
    4. 使用URLDecode解码cookie,获取token。
    5. 使用该token发出rest api请求获取模板列表。

    部分实现

    从WebBrowser获取cookie

    Public Function GetCookieFromBrowser(serverIP As String)
        Dim url As String
        Dim encodedCookie As String
        
        encodedCookie = ""
        url = "https://" + serverIP + "/test/login/" + "?refresh=" + Guid()
    
        FLoginWeb.FWebBrowser.Silent = True
        FLoginWeb.FWebBrowser.Navigate url
        FLoginWeb.Show vbModeless
        
        Do Until InStr(FLoginWeb.FWebBrowser.Document.cookie, "token") > 0: DoEvents: Loop
        
        If FLoginWeb.FWebBrowser.Document.cookie <> "" Then
            encodedCookie = FLoginWeb.FWebBrowser.Document.cookie
            FLoginWeb.Hide        
        End If
        GetEncodedCookieFromWebBrowser = encodedCookie
    End Function
    

    注意

    1. 由于VBA的WebBrowser是IE内核,而微软官方已经宣布放弃支持IE,因此随着Angular、VUE等版本的升级,可能会出现WebBrowser无法正常加载网页的情况,需要多做测试。
    2. WebBrowser默认使用的版本是IE7的兼容模式,为了得到更好的体验,可以修改注册表改为支持IE11,方法如下:
    Public Sub SetWebBrowserIE11()
        Dim fso
        Dim RegKey_User_IE As String
        Dim oWshell
        Dim excelKey As String
        
        On Error Resume Next
        Set fso = CreateObject("Scripting.FileSystemObject")
        RegKey_User_IE = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\excel.exe"
        Set oWshell = CreateObject("WScript.Shell")
        excelKey = oWshell.RegRead(RegKey_User_IE)
        If excelKey = "" Then
            oWshell.RegWrite RegKey_User_IE, "11000", "REG_DWORD"
        End If
        Set oWshell = Nothing
    End Sub
    
  • 相关阅读:
    我这样来解决CSS的Bug
    JavaScript 获取客户端计算机硬件及系统信息
    asp.net Excel导入&导出
    C#编码好习惯
    解决ASP.NET“类型初始值设定项引发异常”
    使cookie在关闭浏览器后失效
    C# 实现Epson热敏打印机打印 Pos机用
    设计模式的主要设计原则简介
    string .format 生成类似20090409001的序号
    SEO中链接的微处理
  • 原文地址:https://www.cnblogs.com/xiaxianfei/p/15712727.html
Copyright © 2011-2022 走看看