金蝶云星空二开支持动态密码校验功能

1.预期二开实现效果:
a.用户名密码登陆后;
b.弹出模态动态密码校验窗口,动态密码文本,确定,取消按钮;
c.确定校验通过,加载主控逻辑;
d.校验失败或取消,登出到登陆界面;
e.不修改原有的主控插件逻辑代码,用二开方式做,扩展主控动态表单,新增插件继承主控插件实现二次校验逻辑;(卸载原有主控插件,避免出厂主控逻辑跑两遍);
2.主插件配置
a. SILVERLIGHT/WPF端主控台ID为BOS_MainConsoleSutra,二开时需拓展该单据,并创建新插件类(以TestMainConsolePlugin.cs为例),将新插件注册到拓展的主控台单据中。新插件继承原silverlight主控插件HomePageSutra,并将原插件HomePageSutra设置为不启用。只需勾选启用新插件TestMainConsolePlugin即可。同理,HTML5端也要按照以上步骤设置主控BOS_HtmlConsoleMain。

b. 按照需求创建所需的动态密码验证表单(本文以BAS_TESTOPTAUTHORIZE为例),并为该表单创建并注册上插件(以TestOPTAuthorize.cs)。插件主要处理获取动态密码,以及验动态密码的正确性,并将校验结果返回到主控台插件中。这里调用了星空生成动态密码的逻辑,只需要用户账户绑定了手机号,点击获取验证码,即可在手机号上获取到动态密码,该动态密码有效时间为30秒。二开可以根据需求创建单据,或者根据需要自己写动态密码的生成和校验逻辑。动态单据以及单据主要逻辑如下。需要引用组件:Kingdee.BOS.Business.PlugIn,Kingdee.BOS.ServiceHelper.dll,Kingdee.BOS.BusinessEntity.dll,Kingdee.BOS.dll。

/// <summary>
/// 按钮点击事件
/// </summary>
/// <param name="e"></param>
public override void ButtonClick(Core.DynamicForm.PlugIn.Args.ButtonClickEventArgs e)
{
if (e.Key.EqualsIgnoreCase("FBtnConfirm"))//确认,校验动态密码的正确性
{
bool checkResult = false;
string str = this.Model.GetValue("FText").ToString();
//动态密码的校验逻辑,这里用的星空的动态密码校验逻辑,该动态密码有效期为15秒
//二开可以根据需要自己写动态密码的生成和校验逻辑
if (!string.IsNullOrWhiteSpace(str))
{
string message = string.Empty;
var issuccess = LightAppServiceHelper.CheckNewSecretKey(this.Context, this.Context.UserName, this.Context.UserId.ToString(), str, out message);
if (issuccess == true)
{
checkResult = true;
this.View.ReturnToParentWindow(new Core.DynamicForm.FormResult(checkResult));
this.View.Close();
}
else//校验失败,报错误提示,点击确定再关闭当前窗体
{
checkResult = false;
this.View.ShowWarnningMessage("动态密码验证失败,即将退回登录页。失败原因:" + message, "", MessageBoxOptions.YesNo,
r =>
{
if (r == MessageBoxResult.Yes)
{
this.View.ReturnToParentWindow(new Core.DynamicForm.FormResult(checkResult));
this.View.Close();
}
});
}
}
else
{
this.View.ShowMessage("请输入验证码!");
}
}
else if (e.Key.EqualsIgnoreCase("FBtnCancle"))
{
PassportHelper.UserAuthTokenRemove(this.View);
this.View.AddAction("logoff", "index.aspx");
}
else if (e.Key.EqualsIgnoreCase("FBtnSendmsg"))//获取动态密码
{
ResultInfo result = new ResultInfo(string.Empty, false);
CloudSMSInfo smsInfo = new CloudSMSInfo();
result = LightAppServiceHelper.GetDynamicPassword(this.Context, this.Context.UserName, this.Context.UserId);
if (result.Successful)
{
smsInfo.SMSMessage = string.Format("动态验证码为:{0}", result.Message);
金蝶云星空二开支持动态密码校验功能
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



