Files
GateDge2023_ljy/00.未分类/VerifyTest/MacVerify.cs
PastSaid 08d8878eef a
2024-03-11 14:47:23 +08:00

164 lines
7.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Concurrent;
using Kingdee.BOS.Authentication;
using Kingdee.BOS.JSON;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Kingdee.BOS.ServiceFacade.ServicesStub;
using Kingdee.BOS.Resource;
using System.Web;
namespace Kingdee.BOS.ServiceFacade.StartApp
{
public class MacVerify : StartAppVerifyServiceBase
{
/// <summary>
/// 客制化参数映射到用户信息,或域签名串映射到用户信息存储池,也可以是数据库
/// </summary>
static ConcurrentDictionary<string, string> customArgsMapUser = new ConcurrentDictionary<string, string>();
static MacVerify()
{
customArgsMapUser["testautologinwithdemo"] = "demo|123qwe!@#|金蝶蓝海实业集团";
}
/// <summary>
/// 随机测试标识,仅用于模拟各种启动校验结果的返回判定
/// </summary>
static int randomFlag = 0;
/// <summary>
/// 实现登录服务处理接口,在程序启动界面加入参数 "ud=TestAutoLoginWithDemo" 即可实现自动用Demo用户登录CPDEMOV5数据中心
/// 例如:
/// WEB的Silverlight: http://xxxx/k3cloud/silverlight/index.aspx?ud=TestAutoLoginWithDemo
/// WEB的HTML5http://xxxx/k3cloud/html5/index.aspx?ud=TestAutoLoginWithDemo
/// </summary>
public override StartAppResult Verify(KDServiceContext context, string ipmac)
{
var ret = this.Verify(ipmac);
if (ret.ResultType == StartAppResultType.Success)
{
var data = JSONObject.Parse(ipmac);
VerifyLogin(context, ret, data);
}
return ret;
}
/// <summary>
/// 实现登录校验的例子的私有函数
/// </summary>
private void VerifyLogin(KDServiceContext context, StartAppResult ret, JSONObject data)
{
//实现自动登录功能
var customArgs = data.GetValue<string>("customArgs", "");//ud用户定义参数将会传递到服务端插件的customArgs中
var isAutoLogin = !string.IsNullOrWhiteSpace(customArgs);
if (isAutoLogin && context != null)
{
try
{
//不一定非得从data中传进来这些信息
//也可以通过Mac映射到数据库中的某个记录从中读取登录信息
//包括用户名、密码和数据库id,已经对应的语种id
//这里只是Demo而已
var userInfoStr = "";
var key = customArgs.ToLowerInvariant();
customArgsMapUser.TryGetValue(key, out userInfoStr);
if (string.IsNullOrWhiteSpace(userInfoStr))
userInfoStr = "";
var userInfo = userInfoStr.Split('|');
var un = userInfo.Length > 2 ? userInfo[0] : "";
var pw = userInfo.Length > 2 ? userInfo[1] : "";
var dbname = userInfo.Length > 2 ? userInfo[2] : "";
var pluginLoginInfo = new PluginLoginInfo()
{
//AcctID = "xxxxxx", //AcctID如果传递将不再通过AcctName查找AcctID了。
//LoginType = PluginLoginType.Common, //默认为用户名密码的通用登录方式。 //PluginLoginInfo.AuthenticateType = Kingdee.BOS.Authentication.AuthenticationType.DynamicPwdAuthentication, // 动态密码验证方式
AcctName = dbname,
Username = un,
Password = pw,
ClientInfo = GetClientInfo(context, data) //基类静态工具方法
};
//调用基类静态工具方法实现登录验证并返回ret.UserToken给客户端实现自动登录
DoLoginCore(context, ret, pluginLoginInfo);
//登录后的参数传入,具体使用参考【自动打开单据】
if (!string.IsNullOrWhiteSpace(ret.SessionId))
{
var isoKey = ret.SessionId + "_AutoLoginArgs";
//登陆成功后,加入自定义参数
HttpContext.Current.Application.Set(isoKey, "PUR_PurchaseOrder|100001");
}
}
catch (Exception ex)
{
ret.ResultType = StartAppResultType.Failure;
ret.FailureCallBackType = StartAppResultCallBackType.Message;
ret.Message = ex.Message + "\r\n" + ex.StackTrace;
}
}
}
/// <summary>
/// 实现基类访问校验接口,如果没有该业务需求,可以不实现,使用基类的接口即可。
/// </summary>
public override StartAppResult Verify(string ipmac)
{
randomFlag++;
StartAppResult ret = null;
var data = JSONObject.Parse(ipmac);
var flag = randomFlag % 5;
flag = 5;
switch (flag)
{
case 4:
// 提示后退出并重定向到指定页面
ret = GetResult(StartAppResultCallBackType.ExitMsg_Redirect, ipmac);
break;
case 3:
// 退出并重定向到指定页面(不做任何提示)
ret = GetResult(StartAppResultCallBackType.Exit_Redirect, ipmac);
break;
case 2:
// 退出并提示
ret = GetResult(StartAppResultCallBackType.ExitMsg, ipmac);
break;
case 1:
// 提示信息(不退出程序)
ret = GetResult(StartAppResultCallBackType.Message, ipmac);
break;
default:
ret = new StartAppResult()
{
ResultType = StartAppResultType.Success
};
randomFlag = 0;
break;
}
return ret;
}
/// <summary>
/// 构造返回结果
/// </summary>
/// <param name="fcbType">返回回调类型</param>
/// <returns></returns>
private static StartAppResult GetResult(StartAppResultCallBackType fcbType, string attMsg)
{
var ret = new StartAppResult()
{
FailureCallBackType = fcbType,
// 成功Sucess正常登录
ResultType = StartAppResultType.Failure,
// 外部网址RedirectUrl = "http://www.kingdee.com"
// 空白页RedirectUrl = "about:blank"
// 失败后重定向URL,可以是相对路径也可以是绝对路径相对路径已K3Cloud为基地址例如http://xxxx/k3cloud/
RedirectUrl = "help/clienthelp.htm",
ExitType = StartAppResultExitType.Shutdown,
Title = "温馨提示" + "0022883030028663",
Message = "网站正在维护中 ... ..." + "0022883030028642" +
"\r\n" + attMsg
};
return ret;
}
}
}