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
    
  • 相关阅读:
    JS闭包中的循环绑定处理程序
    Java学习之路-Spring的HttpInvoker学习
    Java学习之路-Burlap学习
    Java学习之路-Hessian学习
    Java学习之路-RMI学习
    现代浏览器的工作原理
    Socket Connect问题
    Tair总述
    TCP协议解析
    数据结构 之 二叉堆(Heap)
  • 原文地址:https://www.cnblogs.com/xiaxianfei/p/15712727.html
Copyright © 2011-2022 走看看