### 概要说明
1. 使用token来验证两个系统,进行用户登录已经称为了通用做法。
1. 要集成ccflow,jflow 采用双方独立调用模式部署,就需要通过token验证。
1. 我们根据不同的场景,设置两个模式在系统配置文件里进行配置,TokenMode
1. TokenMode=0 是宽泛模式,就是一个账号可以登录多个终端,登录每个终端都产生一个token,这几个token在登录的时间里,一直有效,同时有效。
1. TokenMode=1 是单点模式,类似于微信的登录,在一台机器登录后,另外一台机器登录就会强制退出。
### 调用方法.
生成token
/// <summary>
/// 生成token
/// </summary>
/// <param name="logDev">设备</param>
/// <returns></returns>
public static string Port_GenerToken(string logDev = "PC")
{
//单点模式,严格模式.
if (SystemConfig.TokenModel == 1)
return Port_GenerToken_2021(BP.Web.WebUser.No, logDev, 0, false);
//记录token.
BP.Port.Token tk = new Token();
tk.MyPK = DBAccess.GenerGUID();
tk.EmpNo = BP.Web.WebUser.No;
tk.EmpName = BP.Web.WebUser.Name;
tk.DeptNo = BP.Web.WebUser.FK_Dept;
tk.DeptName = BP.Web.WebUser.FK_DeptName;
tk.OrgNo = BP.Web.WebUser.OrgNo;
tk.OrgName = BP.Web.WebUser.OrgName;
tk.RDT = DataType.CurrentDateTime; //记录日期.
if (logDev.Equals("PC"))
tk.SheBei = 0;
else
tk.SheBei = 1;
return tk.MyPK;
}
使用token登录.
/// <summary>
/// 按照token登录 2021.07.01 采用新方式.
/// </summary>
/// <param name="token"></param>
public static string Port_LoginByToken(string token)
{
try
{
if (DataType.IsNullOrEmpty(token))
throw new Exception("err@ token 不能为空.");
token = token.Trim();
if (DataType.IsNullOrEmpty(token) == true)
throw new Exception("err@非法的Token.");
//如果是宽泛模式.
if (SystemConfig.TokenModel == 0)
{
Token tk = new Token();
tk.MyPK = token;
if (tk.RetrieveFromDBSources()==0)
throw new Exception("err@ token 过期或失效.");
BP.Web.WebUser.No = tk.EmpNo;
BP.Web.WebUser.Name = tk.EmpName;
BP.Web.WebUser.FK_Dept = tk.DeptNo;
BP.Web.WebUser.FK_DeptName = tk.DeptName;
BP.Web.WebUser.OrgNo = tk.OrgNo;
BP.Web.WebUser.OrgName = tk.OrgName;
return tk.ToJson();
}
string sql = "SELECT No FROM WF_Emp WHERE AtPara LIKE '%" + token + "%'";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
if (dt.Rows.Count != 1)
throw new Exception("err@token失效." + token);
string no = dt.Rows[0][0].ToString();
//执行登录.
BP.WF.Dev2Interface.Port_Login(no);
return no;
}
catch (Exception ex)
{
throw ex;
}
}
### 配置方法.
1. 在ccflow里面设置 web.config 找到TokenModel节点,如果没有就增加一个。
1. 在java版本的jflow里面找到 jflow.properties , 同上。
### TokenModel数据结构设计.
字段设计
Map map = new Map("Port_Token", "登录记录");
map.CodeStruct = "2";
map.AddMyPK();
map.AddTBString(TokenAttr.EmpNo, null, "人员编号", true, false, 0, 100, 20);
map.AddTBString(TokenAttr.EmpName, null, "人员名称", true, false, 0, 100, 20);
map.AddTBString(TokenAttr.DeptNo, null, "部门编号", true, false, 0, 100, 20);
map.AddTBString(TokenAttr.DeptName, null, "部门名称", true, false, 0, 100, 20);
map.AddTBString(TokenAttr.OrgNo, null, "组织编号", true, false, 0, 100, 20);
map.AddTBString(TokenAttr.OrgName, null, "组织名称", true, false, 0, 100, 20);
map.AddTBDateTime(TokenAttr.RDT, null, "记录日期", true, false);
map.AddTBInt(TokenAttr.SheBei, 0, "0=PC,1=移动", true, false);