当前位置: 首页 > 工具软件 > ccflow > 使用案例 >

关于ccflow工作流引擎的token的设置模式.

岳谦
2023-12-01

### 概要说明

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);

 

 类似资料: