未分类 · 2025年8月19日

UniGui被集成实现三方系统单点登录

单点登录是经常在系统集成中要使用的一种技术,其目的是减少用户在系统间跳转时的频繁登录操作;使多个系统使用起来更像是一个系统;

单点登录一般都使用Url查询参数的方式实现,例如:

http://localhost/?name=1111&password=2333
Pascal

需要UniGui来进行解析;一般在UniMainModule中的UniGUIMainModuleBeforeLogin中进行处理;

//如何获取查询参数;
//假如请求URL为  http://localhost/?name=1111&password=2333

procedure TUniMainModule.UniGUIMainModuleBeforeLogin(Sender: TObject;
  var Handled: Boolean);
begin
  with (Sender as TUniGUISession).UniApplication.Parameters do
  begin
    //获取请求参数 - name
    Values['name'];
    //获取请求参数 - password
    Values['password'];
  end;
  //这里进行账户验证、权限赋予等操作
  ......
  //不进行登录;如果验证失败,这个地方就填 False
  Handled := True;
end;
Pascal

以上处理后,已经可以绕开登录界面正常进入主页了;但是这个时候另外一个问题来了,浏览器的URL中有用户名和参数;

这样明目张胆的显示在这里,显然是不好的;另外实际应用中,必须对敏感信息进行加密处理~~!

下面增加了不刷新页面去除请求参数的代码,比较简单

//如何获取查询参数;
//假如请求URL为  http://localhost/?name=1111&password=2333

procedure TUniMainModule.UniGUIMainModuleBeforeLogin(Sender: TObject;
  var Handled: Boolean);
begin
  with (Sender as TUniGUISession).UniApplication.Parameters do
  begin
    //获取请求参数 - name
    Values['name'];
    //获取请求参数 - password
    Values['password'];
  end;
  //这里进行账户验证、权限赋予等操作
  ......
  //不刷新页面;去除实际的请求参数
  //参数1:状态对象,可存储页面相关数据(通常传空对象)‌ 默认{}就可以了
  //参数2:标题(现代浏览器忽略此参数)‌ 默认""就可以了
  //参数3:新URL(必须同源)‌ 这个地方需要随便填点东西,但是不能为"";如果填空,原本的参数不变
  UniSession.AddJS('window.history.pushState({}, "", "?Local")');
  
  //不进行登录;如果验证失败,这个地方就填 False
  Handled := True;
end;
Pascal