LoginController.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. using SysBaseLibs;
  2. using SysDataLibs;
  3. using SysDataLibs.TableClass;
  4. using System;
  5. using System.Drawing;
  6. using System.Drawing.Imaging;
  7. using System.Globalization;
  8. using System.IO;
  9. using System.Web;
  10. using System.Web.Mvc;
  11. namespace GSMarketSys.Controllers
  12. {
  13. public class LoginController : Controller
  14. {
  15. //GET: Login
  16. public ActionResult Index()
  17. {
  18. ViewBag.UserNo = WebLibs.GetCookieValue("UserName");
  19. ViewBag.RememberMe = "";
  20. ViewBag.ErrorInfo = TempData["ErrorInfo"];
  21. DBConnSql dbConn = new DBConnSql();
  22. dbConn.Open();
  23. ViewBag.SelSystemIDInfo = GetData.Instance.GetSelStr(GSSystem_info.cSystemID, GSSystem_info.cshortName, Tn.GSSystem, GSSystem_info.cSystemType + "='N'", dbConn);
  24. dbConn.Close();
  25. if (!string.IsNullOrEmpty(ViewBag.UserNo))
  26. {
  27. ViewBag.RememberMe = "checked";
  28. ViewBag.Password = WebLibs.GetCookieValue("UserPassword");
  29. }
  30. ////通过平台保存的cookie登陆工商子系统
  31. //if (LoginViaPlatCookie())
  32. //{
  33. // return RedirectToAction("MainIndex", "Main");
  34. //}
  35. return View();
  36. }
  37. ////通过平台保存的cookie登陆工商子系统
  38. //protected bool LoginViaPlatCookie()
  39. //{
  40. // bool lbRetval = false;
  41. // try
  42. // {
  43. // HttpCookie cookie = Request.Cookies["UserName"];
  44. // if (cookie != null)
  45. // {
  46. // string strUserNo = cookie.Values["GSUserNo"];
  47. // string strGuid = cookie.Values["GSGUID"];
  48. // if ((!string.IsNullOrEmpty(strUserNo)) && (!string.IsNullOrEmpty(strGuid)))
  49. // {
  50. // UserSession lcUserSession = LoginGUID.Instance.GetOne(strGuid);
  51. // if (lcUserSession != null)
  52. // {
  53. // System.Web.HttpContext.Current.Session[Contants.UserInfoId] = lcUserSession;
  54. // lbRetval = true;
  55. // //return View("");
  56. // //Response.Redirect("publish/MainIndex.aspx");
  57. // }
  58. // }
  59. // }
  60. // }
  61. // catch (Exception err)
  62. // {
  63. // ThreadLog.LogErr("LoginViaPlatCookie failed, " + err.Message);
  64. // }
  65. // return lbRetval;
  66. //}
  67. [HttpPost]
  68. public ActionResult Login()
  69. {
  70. string lcErrorMsg = "";
  71. string userNo = Request["UserNo"];
  72. string password = Request["Password"];
  73. string imageCode = Request["ImageCode"];
  74. //string rememberMe = Request["RememberMe"];
  75. if (SysDataLibs.AppEnv.SysSetObj.GetString("IsShowValidateCode") == "Y" &&
  76. System.Web.HttpContext.Current.Session["suzygsjCheckCode"]?.ToString().ToLower() != imageCode.ToLower())
  77. {
  78. TempData["ErrorInfo"] = "验证码不正确!";
  79. return RedirectToAction("Index");
  80. }
  81. if (string.IsNullOrWhiteSpace(userNo) || string.IsNullOrWhiteSpace(password))
  82. {
  83. TempData["ErrorInfo"] = "用户名或密码不能为空";
  84. return RedirectToAction("Index");
  85. }
  86. bool lbLogin = UserSession.UserLogin(userNo, password, ref lcErrorMsg);
  87. //string lIp = "";
  88. //if (Request.UserHostAddress != "")
  89. //{
  90. // lIp = Request.UserHostAddress;
  91. //}
  92. if (lbLogin)
  93. {
  94. if (Request["RememberMe"] == "on")
  95. {
  96. WebLibs.SetCookieValue("UserName", userNo.Trim());
  97. WebLibs.SetCookieValue("UserPassword", password.Trim());
  98. }
  99. else
  100. {
  101. WebLibs.SetCookieValue("UserName", "");
  102. WebLibs.SetCookieValue("UserPassword", "");
  103. }
  104. if (System.Web.HttpContext.Current.Session != null && System.Web.HttpContext.Current.Session[Contants.UserInfoId] != null)
  105. {
  106. //UserSession loUserSession = (UserSession)System.Web.HttpContext.Current.Session[Contants.UserInfoId];
  107. }
  108. //// 平台单点登录Cookie
  109. //if (loUserSession != null && loUserSession.IsSystem)
  110. //{
  111. // SetPlatLoginCookie(UserNo, Password);
  112. //}//<---
  113. Sys_Log_info loSysLog = new Sys_Log_info
  114. {
  115. SysLogId = RandomUtil.GetGUID(),
  116. LogCommand = "Logion",
  117. LogDate = DateTime.Now.ToString(CultureInfo.InvariantCulture),
  118. LogMessage = "用户 " + userNo.Trim() + " 登录成功 ",
  119. LogErrorMessage = "",
  120. LogSite = WebLibs.CurPageName,
  121. SysLogType = ((int)LogType.System).ToString(),
  122. UserId = userNo.Trim(),
  123. UserHostAddress = System.Web.HttpContext.Current.Request.UserHostAddress
  124. };
  125. Sys_Log_info.LogMsg(loSysLog);
  126. //Response.Redirect("publish/IndexMain.aspx");
  127. //Response.Redirect("Publish/MainIndexNew.aspx");
  128. //JSComm.WebWriteScript("window.location.href='../Publish/AuditList.aspx'");
  129. // FineUI.PageContext.RegisterStartupScript("window.location.href='publish/MainIndex.aspx'");
  130. return RedirectToAction("MainIndex", "Main");
  131. }
  132. else
  133. {
  134. Sys_Log_info loSysLog = new Sys_Log_info
  135. {
  136. SysLogId = RandomUtil.GetGUID(),
  137. LogCommand = "Logion",
  138. LogDate = DateTime.Now.ToString(CultureInfo.InvariantCulture),
  139. LogMessage = "用户 " + userNo.Trim() + " 登录失败!",
  140. LogErrorMessage = lcErrorMsg,
  141. SysLogType = ((int)LogType.System).ToString(),
  142. UserId = userNo.Trim(),
  143. UserHostAddress = System.Web.HttpContext.Current.Request.UserHostAddress
  144. };
  145. Sys_Log_info.LogMsg(loSysLog);
  146. //JSComm.ShowMessage(lcErrorMsg);
  147. //errorDiv.Style.Add("display", "block");
  148. //errormsg.InnerText = "用户 " + lcUserName.Trim() + "登录失败!!";
  149. //return RedirectToAction("Index", "Login", new { ispostback = "true", errormsg = "用户 " + UserNo.Trim() + "登录失败!!" });
  150. TempData["ErrorInfo"] = lcErrorMsg;
  151. return RedirectToAction("Index");
  152. //return Content("<script>alert('登录失败," + lcErrorMsg + "');window.location.href='/Login/Index';</script>");
  153. }
  154. }
  155. public ActionResult LoginOut()
  156. {
  157. System.Web.HttpContext.Current.Session.RemoveAll();
  158. return RedirectToAction("Index");
  159. }
  160. // 平台单点登录Cookie
  161. protected void SetPlatLoginCookie(string lcUserName, string lcPassword)
  162. {
  163. try
  164. {
  165. if (Request.Cookies["UserName"] != null)
  166. {
  167. //Request.Cookies["UserName"].Expires = DateTime.Now.AddDays(-1);
  168. Request.Cookies.Remove("UserName");
  169. }
  170. HttpCookie cookie = new HttpCookie("UserName")
  171. {
  172. Domain = "sipac.gov.cn",
  173. Expires = DateTime.Now.AddMinutes(30)
  174. };
  175. // 本机调试时注释此行
  176. cookie.Values.Add("GSUserNo", lcUserName);
  177. string strGuid = Guid.NewGuid().ToString("N");
  178. UserSession session = System.Web.HttpContext.Current.Session[Contants.UserInfoId] as UserSession;
  179. if (session != null)
  180. {
  181. LoginGUID.Instance.AddOne(strGuid, session);
  182. cookie.Values.Add("GSGUID", strGuid);
  183. }
  184. else
  185. {
  186. cookie.Values.Add("GSGUID", "");
  187. }
  188. // 工商用户是否在平台注册过
  189. string strAppNo = "1001";
  190. nsSubSysUserManage.ServiceUserInfo userInfo = ISipPlatHelper.SubSysUserInfo(lcUserName, strAppNo);
  191. if (string.IsNullOrEmpty(userInfo?.UserNo))
  192. return;
  193. // 通过工商系统的用户名调用平台提供的单点登录接口获得用户令牌
  194. string lcEncryptPwd = SysSecLibs.SysSecurity.Encrypt(lcPassword);
  195. nsRightsWS.ServiceLogin result = ISipPlatHelper.LoginToPlatOrSubSys(lcUserName, lcEncryptPwd, strAppNo);
  196. if (result != null && result.Flag)
  197. {
  198. if (!string.IsNullOrEmpty(result.AuUrl))
  199. {
  200. // 格式为:"http://spjg.sipac.gov.cn/SPJG/Layout/BaseLayout/Login.aspx?GUID=326d1948-5399-42f2-bb4d-56e8c93c0599&AppNo=1001&UserNo=sabAdmin";
  201. string lcAuUrl = result.AuUrl;
  202. int nStart = lcAuUrl.IndexOf("GUID=", StringComparison.Ordinal);
  203. if (nStart > 0)
  204. {
  205. int nEnd = lcAuUrl.IndexOf("&", nStart, StringComparison.Ordinal);
  206. if (nEnd > 0)
  207. {
  208. string strAppGuid = lcAuUrl.Substring(nStart + 5, nEnd - nStart - 5);
  209. cookie.Values.Add("AppGUID", strAppGuid);
  210. }
  211. }
  212. }
  213. }
  214. // 写入Cookie
  215. Response.Cookies.Add(cookie);
  216. }
  217. catch (Exception err)
  218. {
  219. ThreadLog.LogErr("SetPlatLoginCookie failed, " + err.Message);
  220. }
  221. }
  222. private string CreateRandomCode(int codeCount)
  223. {
  224. string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
  225. string[] allCharArray = allChar.Split(',');
  226. string randomCode = "";
  227. int temp = -1;
  228. Random rand = new Random();
  229. for (int i = 0; i < codeCount; i++)
  230. {
  231. if (temp != -1)
  232. {
  233. rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
  234. }
  235. int t = rand.Next(35);
  236. if (temp == t)
  237. {
  238. return CreateRandomCode(codeCount);
  239. }
  240. temp = t;
  241. randomCode += allCharArray[t];
  242. }
  243. return randomCode;
  244. }
  245. private Bitmap CreateImage(string checkCode)
  246. {
  247. int iwidth = checkCode.Length * 12;
  248. Bitmap image = new Bitmap(iwidth, 20);
  249. Graphics g = Graphics.FromImage(image);
  250. Font f = new Font("Arial", 11, FontStyle.Bold);
  251. Brush b = new SolidBrush(Color.Black);
  252. //g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
  253. //g.Clear(Color.Blue);
  254. g.Clear(ColorTranslator.FromHtml("#A9BACA"));
  255. g.DrawString(checkCode, f, b, 2, 3);
  256. Pen blackPen = new Pen(ColorTranslator.FromHtml("#114889"), 1);
  257. Random rand = new Random();
  258. for (int i = 0; i < 3; i++)
  259. {
  260. int y = rand.Next(image.Height);
  261. g.DrawLine(blackPen, 0, y, image.Width, y);
  262. }
  263. MemoryStream ms = new MemoryStream();
  264. image.Save(ms, ImageFormat.Jpeg);
  265. //Response.ClearContent();
  266. //Response.ContentType = "image/Jpeg";
  267. //Response.BinaryWrite(ms.ToArray());
  268. //g.Dispose();
  269. //image.Dispose();
  270. return image;
  271. }
  272. public FileContentResult ValidateCode()
  273. {
  274. //string code = GetRndStr();
  275. string checkCode = CreateRandomCode(4);
  276. System.Web.HttpContext.Current.Session["suzygsjCheckCode"] = checkCode;
  277. byte[] imageByte;
  278. using (Bitmap img = CreateImage(checkCode))
  279. {
  280. imageByte = BitmapToByte(img);
  281. //Session["validate"] = code;
  282. }
  283. return File(imageByte, "image/gif");
  284. }
  285. public static byte[] BitmapToByte(Bitmap bitmap)
  286. {
  287. using (MemoryStream stream = new MemoryStream())
  288. {
  289. bitmap.Save(stream, ImageFormat.Jpeg);
  290. byte[] data = new byte[stream.Length];
  291. stream.Seek(0, SeekOrigin.Begin);
  292. stream.Read(data, 0, Convert.ToInt32(stream.Length));
  293. return data;
  294. }
  295. }
  296. public ActionResult Register()
  297. {
  298. DBConnSql dbConn = new DBConnSql();
  299. dbConn.Open();
  300. string systemId = GetRequest("SystemID"),
  301. warrantNumber = GetRequest("WarrantNumber"),
  302. password = GetRequest("Password"),
  303. regionId = "100001 ",
  304. regionName = new Regions_info(regionId, dbConn).Names,
  305. userName = GetRequest("UserName"),
  306. linkTel = GetRequest("LinkTel");
  307. if (Utils.ProcessSqlStr(userName)|| Utils.ProcessSqlStr(linkTel) || Utils.ProcessSqlStr(warrantNumber))
  308. {
  309. return Content(ErrorRebackInfo.GetErrorBackInfo(false,"0","输入参数包含敏感字符!"));
  310. }
  311. SysRegisters_info registersInfo = new SysRegisters_info
  312. {
  313. RegisterID = Guid.NewGuid().ToString("N"),
  314. SystemID = systemId,
  315. WarrantNumber = warrantNumber,
  316. MarketID = warrantNumber,
  317. MarketName = userName,
  318. //ValidStartTime = validStartTime,
  319. //ValidEndTime = validEndTime,
  320. RegionID = regionId,
  321. RegionName = regionName,
  322. LinkTel = linkTel,
  323. UserCode = warrantNumber.Substring(9),
  324. UserName = userName,
  325. IsAudit = "N",
  326. RegisterIP = System.Web.HttpContext.Current.Request.UserHostAddress,
  327. RegisterDate = DateTime.Now.ToShortDateString(),
  328. Password = password
  329. };
  330. ThreadLog.LogInfo("----注册Sql:"+registersInfo.InsertSql());
  331. if (dbConn.ExcuteSqlTran(registersInfo.InsertSql()))
  332. {
  333. dbConn.Close();
  334. return Content(SysRebackDisplayInfo.Instance.GetDisplayValue("Reg_Success"));
  335. }
  336. dbConn.Close();
  337. return Content(SysRebackDisplayInfo.Instance.GetDisplayValue("Reg_Error"));
  338. }
  339. /// <summary>
  340. /// 获取Requset[key]值,并ToSQL处理
  341. /// </summary>
  342. /// <param name="key"></param>
  343. /// <param name="type"></param>
  344. /// <returns></returns>
  345. private string GetRequest(string key, string type = "string")
  346. {
  347. string lcRetval = Request[key] ?? "";
  348. if (type.ToLower() == "int")
  349. lcRetval = GetData.Instance.SetIntDefault(lcRetval);
  350. return Utils.AreaToSQLcs(lcRetval);
  351. }
  352. }
  353. }