@@ -1201,6 +1201,31 @@ namespace Learun.Application.Organization | |||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 修改用户的允许登录结束时间 | |||||
/// </summary> | |||||
/// <param name="keyValue">主键值</param> | |||||
/// <param name="state">状态:1-赋值;0-重置</param> | |||||
public void UpdateAllowEndTime(string keyValue, int state) | |||||
{ | |||||
try | |||||
{ | |||||
userService.UpdateAllowEndTime(keyValue, state); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
if (ex is ExceptionEx) | |||||
{ | |||||
throw; | |||||
} | |||||
else | |||||
{ | |||||
throw ExceptionEx.ThrowBusinessException(ex); | |||||
} | |||||
} | |||||
} | |||||
///// <summary> | ///// <summary> | ||||
///// 获取用户头像 | ///// 获取用户头像 | ||||
///// </summary> | ///// </summary> | ||||
@@ -195,5 +195,12 @@ namespace Learun.Application.Organization | |||||
void UpdateIp(string ip, string id); | void UpdateIp(string ip, string id); | ||||
void GetImgForDC(string userId); | void GetImgForDC(string userId); | ||||
UserEntity GetEntityByWeixinOpenIdPC(string openId); | UserEntity GetEntityByWeixinOpenIdPC(string openId); | ||||
/// <summary> | |||||
/// 修改用户的允许登录结束时间 | |||||
/// </summary> | |||||
/// <param name="keyValue">主键值</param> | |||||
/// <param name="state">状态:1-赋值;0-重置</param> | |||||
void UpdateAllowEndTime(string keyValue, int state); | |||||
} | } | ||||
} | } |
@@ -848,6 +848,38 @@ namespace Learun.Application.Organization | |||||
} | } | ||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 修改用户的允许登录结束时间 | |||||
/// </summary> | |||||
/// <param name="keyValue">主键值</param> | |||||
/// <param name="state">状态:1-赋值;0-重置</param> | |||||
public void UpdateAllowEndTime(string keyValue, int state) | |||||
{ | |||||
try | |||||
{ | |||||
if (state == 0) | |||||
{ | |||||
this.BaseRepository().ExecuteBySql("update LR_Base_User set F_AllowEndTime=null where F_UserId='" + keyValue + "'"); | |||||
} | |||||
else | |||||
{ | |||||
this.BaseRepository().ExecuteBySql("update LR_Base_User set F_AllowEndTime='" + DateTime.Now + "' where F_UserId='" + keyValue + "'"); | |||||
} | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
if (ex is ExceptionEx) | |||||
{ | |||||
throw; | |||||
} | |||||
else | |||||
{ | |||||
throw ExceptionEx.ThrowServiceException(ex); | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -38,6 +38,7 @@ namespace Learun.Application.Web.Controllers | |||||
private LoginModelIBLL loginModelIbll = new LoginModelBLL(); | private LoginModelIBLL loginModelIbll = new LoginModelBLL(); | ||||
private AnnexesFileIBLL annexesFileIbll = new AnnexesFileBLL(); | private AnnexesFileIBLL annexesFileIbll = new AnnexesFileBLL(); | ||||
WeChatDevelopIBLL weChatDevelopIbll = new WeChatDevelopBLL(); | WeChatDevelopIBLL weChatDevelopIbll = new WeChatDevelopBLL(); | ||||
private Sys_DefaultPwdConfigIBLL sys_DefaultPwdConfigIBLL = new Sys_DefaultPwdConfigBLL(); | |||||
#endregion | #endregion | ||||
#region 视图功能 | #region 视图功能 | ||||
@@ -184,6 +185,15 @@ namespace Learun.Application.Web.Controllers | |||||
} | } | ||||
//获取错误次数 | //获取错误次数 | ||||
ViewBag.errornum = OperatorHelper.Instance.GetCurrentErrorNum(); | ViewBag.errornum = OperatorHelper.Instance.GetCurrentErrorNum(); | ||||
//获取初始密码设置中已启用的密码 | |||||
ViewBag.IsSetDefaultPwd = false; | |||||
ViewBag.DefaultPwd = ""; | |||||
var defaultPwdEntity = sys_DefaultPwdConfigIBLL.GetEnabledEntity(); | |||||
if (defaultPwdEntity != null) | |||||
{ | |||||
ViewBag.IsSetDefaultPwd = true; | |||||
ViewBag.DefaultPwd = defaultPwdEntity.Pwd; | |||||
} | |||||
//获取高职版跳转地址 | //获取高职版跳转地址 | ||||
ViewBag.DigitalschoolMisLoginurl = ConfigurationManager.AppSettings["DigitalschoolMisLoginurl"]; | ViewBag.DigitalschoolMisLoginurl = ConfigurationManager.AppSettings["DigitalschoolMisLoginurl"]; | ||||
ViewBag.Returnurl = "http://" + Request.Url.Host + ":" + Request.Url.Port; | ViewBag.Returnurl = "http://" + Request.Url.Host + ":" + Request.Url.Port; | ||||
@@ -499,11 +509,13 @@ namespace Learun.Application.Web.Controllers | |||||
/// <param name="username">用户名</param> | /// <param name="username">用户名</param> | ||||
/// <param name="password">密码</param> | /// <param name="password">密码</param> | ||||
/// <param name="verifycode">验证码</param> | /// <param name="verifycode">验证码</param> | ||||
/// <param name="up">密码是否是强密码</param> | |||||
/// <param name="defaultPwdTip">密码是否是初始密码,是则需要提示(true)</param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
[HttpPost] | [HttpPost] | ||||
[AjaxOnly] | [AjaxOnly] | ||||
[HandlerValidateAntiForgeryToken] | [HandlerValidateAntiForgeryToken] | ||||
public ActionResult CheckLogin(string username, string password, string verifycode, string up) | |||||
public ActionResult CheckLogin(string username, string password, string verifycode, string up, string defaultPwdTip) | |||||
{ | { | ||||
int error = OperatorHelper.Instance.GetCurrentErrorNum(); | int error = OperatorHelper.Instance.GetCurrentErrorNum(); | ||||
@@ -521,6 +533,41 @@ namespace Learun.Application.Web.Controllers | |||||
#region 内部账户验证 | #region 内部账户验证 | ||||
UserEntity userEntity = userBll.CheckLogin(username, password); | UserEntity userEntity = userBll.CheckLogin(username, password); | ||||
#region 登录次数限制,禁止登录时间限制 | |||||
int defaultForbidLoginNum = 5;//默认的禁止登录次数 | |||||
double defaultForbidLoginMinutes = 10;//默认的禁止登录分钟数 | |||||
if (!string.IsNullOrEmpty(Config.GetValue("ForbidLoginNum"))) | |||||
{ | |||||
defaultForbidLoginNum = Config.GetValue("ForbidLoginNum").ToInt(); | |||||
} | |||||
if (!string.IsNullOrEmpty(Config.GetValue("ForbidLoginMinutes"))) | |||||
{ | |||||
defaultForbidLoginMinutes = Config.GetValue("ForbidLoginMinutes").ToDouble(); | |||||
} | |||||
//错误次数大于等于5时,判断禁止登录时间是否超过10分钟:若是则修改用户的允许登录结束时间,可以登录;若否,禁止登录; | |||||
if (error >= defaultForbidLoginNum) | |||||
{ | |||||
if (userEntity.LoginOk)//登录成功 | |||||
{ | |||||
if (userEntity.F_AllowEndTime.HasValue) | |||||
{ | |||||
var period = (DateTime.Now - userEntity.F_AllowEndTime.Value).TotalMinutes; | |||||
if (period >= defaultForbidLoginMinutes) | |||||
{ | |||||
userBll.UpdateAllowEndTime(userEntity.F_UserId, 0); | |||||
} | |||||
else | |||||
{ | |||||
return Fail("错误次数超过" + defaultForbidLoginNum + "次,已被禁止登录,请" + defaultForbidLoginMinutes + "分钟后重试!", error); | |||||
} | |||||
} | |||||
} | |||||
else//登录失败 | |||||
{ | |||||
return Fail(userEntity.LoginMsg, error); | |||||
} | |||||
} | |||||
#endregion | |||||
#region 写入日志 | #region 写入日志 | ||||
LogEntity logEntity = new LogEntity(); | LogEntity logEntity = new LogEntity(); | ||||
@@ -540,6 +587,11 @@ namespace Learun.Application.Web.Controllers | |||||
logEntity.F_ExecuteResultJson = "登录失败:" + userEntity.LoginMsg; | logEntity.F_ExecuteResultJson = "登录失败:" + userEntity.LoginMsg; | ||||
logEntity.WriteLog(); | logEntity.WriteLog(); | ||||
int num = OperatorHelper.Instance.AddCurrentErrorNum(); | int num = OperatorHelper.Instance.AddCurrentErrorNum(); | ||||
//判断登录错误次数大于等于5,修改用户的允许登录结束时间; | |||||
if (num >= defaultForbidLoginNum) | |||||
{ | |||||
userBll.UpdateAllowEndTime(userEntity.F_UserId, 1); | |||||
} | |||||
return Fail(userEntity.LoginMsg, num); | return Fail(userEntity.LoginMsg, num); | ||||
} | } | ||||
else | else | ||||
@@ -552,12 +604,15 @@ namespace Learun.Application.Web.Controllers | |||||
logEntity.F_ExecuteResultJson = "登录成功"; | logEntity.F_ExecuteResultJson = "登录成功"; | ||||
logEntity.WriteLog(); | logEntity.WriteLog(); | ||||
OperatorHelper.Instance.ClearCurrentErrorNum(); | OperatorHelper.Instance.ClearCurrentErrorNum(); | ||||
//修改用户的允许登录结束时间; | |||||
userBll.UpdateAllowEndTime(userEntity.F_UserId, 0); | |||||
//是否强密码验证 | //是否强密码验证 | ||||
if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["verifypwd"]) && ConfigurationManager.AppSettings["verifypwd"] == "true" && up == "false") | if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["verifypwd"]) && ConfigurationManager.AppSettings["verifypwd"] == "true" && up == "false") | ||||
{ | { | ||||
return Success(new { pwd = true }); | |||||
return Success(new { pwd = true, pwdtip = defaultPwdTip == "true" ? true : false }); | |||||
} | } | ||||
return Success("登录成功"); | |||||
//返回成功的数据(pwdtip:初始密码提示弹框;pwd:弱密码修改弹框;) | |||||
return Success("登录成功", new { pwdtip = defaultPwdTip == "true" ? true : false }); | |||||
} | } | ||||
#endregion | #endregion | ||||
} | } | ||||
@@ -899,8 +954,8 @@ namespace Learun.Application.Web.Controllers | |||||
{ | { | ||||
string appid = "76d40062-349f-486d-b871-35bed08d2f59"; | string appid = "76d40062-349f-486d-b871-35bed08d2f59"; | ||||
string secret = "cgpi"; | string secret = "cgpi"; | ||||
string appkey =Request.QueryString["appkey"]; | |||||
string response = Util.HttpMethods.HttpGet("http://localhost:20472/SSOSystem/authorize?appid=" + appid + "&secret=" + secret + "&appkey="+ appkey); | |||||
string appkey = Request.QueryString["appkey"]; | |||||
string response = Util.HttpMethods.HttpGet("http://localhost:20472/SSOSystem/authorize?appid=" + appid + "&secret=" + secret + "&appkey=" + appkey); | |||||
return Content(response); | return Content(response); | ||||
} | } | ||||
@@ -6,7 +6,9 @@ | |||||
* 描 述:经典风格皮肤 | * 描 述:经典风格皮肤 | ||||
*/ | */ | ||||
var autoopenid = request('autoopen'); | var autoopenid = request('autoopen'); | ||||
var pwd = request("pwd"); | |||||
var pwd = request("pwd");//弱密码修改弹框 | |||||
var pwdtip = request("pwdtip");//初始密码提示弹框 | |||||
var pwdpwdtip = request("pwdpwdtip");//弱密码修改弹框&初始密码提示弹框 | |||||
var bootstrap = function ($, learun) { | var bootstrap = function ($, learun) { | ||||
"use strict"; | "use strict"; | ||||
// 菜单操作 | // 菜单操作 | ||||
@@ -197,7 +199,8 @@ var bootstrap = function ($, learun) { | |||||
// area: ['500px', '300px'] | // area: ['500px', '300px'] | ||||
// }); | // }); | ||||
//} | //} | ||||
if (pwd == "true") { | |||||
//弱密码修改弹框 | |||||
if (pwd == "true" || pwdpwdtip == "true") { | |||||
top.layer.open({ | top.layer.open({ | ||||
id: 'pwdform', | id: 'pwdform', | ||||
title: '密码修改', | title: '密码修改', | ||||
@@ -225,6 +228,10 @@ var bootstrap = function ($, learun) { | |||||
} | } | ||||
}); | }); | ||||
} | } | ||||
//初始密码提示弹框 | |||||
if (pwdtip == "true" || pwdpwdtip == "true") { | |||||
learun.layerConfirm('当前登录密码还是初始密码!', function (res) { }); | |||||
} | |||||
//上网认证 | //上网认证 | ||||
if (ACIp != null && ACIp != "") { | if (ACIp != null && ACIp != "") { | ||||
//Ip上网 | //Ip上网 | ||||
@@ -49,6 +49,8 @@ | |||||
<link href="~/Content/css/process.css" rel="stylesheet" /> | <link href="~/Content/css/process.css" rel="stylesheet" /> | ||||
<!-- <img src="~/Content/images/Logins/loginBg.jpg" /> --> | <!-- <img src="~/Content/images/Logins/loginBg.jpg" /> --> | ||||
<input id="errornum" type="hidden" value="@ViewBag.errornum" /> | <input id="errornum" type="hidden" value="@ViewBag.errornum" /> | ||||
<input id="DefaultPwd" type="hidden" value="@ViewBag.DefaultPwd" data-IsSetDefaultPwd="@ViewBag.IsSetDefaultPwd"/> | |||||
<div class="lr-login-body"> | <div class="lr-login-body"> | ||||
<div class="lr-login-logo"> | <div class="lr-login-logo"> | ||||
@@ -59,7 +61,7 @@ | |||||
<div class="lr-login-middle"> | <div class="lr-login-middle"> | ||||
@if (ViewBag.WeixinLoginSwitch) | @if (ViewBag.WeixinLoginSwitch) | ||||
{ | { | ||||
<a href="/Login/LoginForWeixin?login=one" class="wxLogin down" title="使用微信登录"> | |||||
<a href="/Login/LoginForWeixin?login=one" class="wxLogin down" title="使用微信登录"> | |||||
<img src="~/Content/images/LoginPage/icon.png" alt="" /> 使用微信登录 | <img src="~/Content/images/LoginPage/icon.png" alt="" /> 使用微信登录 | ||||
</a> | </a> | ||||
} | } | ||||
@@ -121,14 +123,14 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="lr-login-footer" style="font-size: 12px;color: #fff;width: 880px;right:0;margin: auto;"> | |||||
<div class="tips"> | |||||
<img src="~/Content/images/LoginPage/tips3.png" alt=""> <span>建议使用360或谷歌浏览器</span> | |||||
</div> | |||||
<div style="position: relative;"> | |||||
Copyright © 2019 数字化智慧校园 版权所有 <span class="OnlineUserNumBox" style="position: absolute;right: 0;top: 0;">在线用户数:<span class="OnlineUserNum">@ViewBag.OnlineUserNum</span>人</span> | |||||
</div> | |||||
<div class="lr-login-footer" style="font-size: 12px;color: #fff;width: 880px;right:0;margin: auto;"> | |||||
<div class="tips"> | |||||
<img src="~/Content/images/LoginPage/tips3.png" alt=""> <span>建议使用360或谷歌浏览器</span> | |||||
</div> | |||||
<div style="position: relative;"> | |||||
Copyright © 2019 数字化智慧校园 版权所有 <span class="OnlineUserNumBox" style="position: absolute;right: 0;top: 0;">在线用户数:<span class="OnlineUserNum">@ViewBag.OnlineUserNum</span>人</span> | |||||
</div> | |||||
</div> | </div> | ||||
<img id="loginFoot" src="~/Content/images/logins/login1.png" alt=""> | <img id="loginFoot" src="~/Content/images/logins/login1.png" alt=""> | ||||
<script src="~/Content/jquery/jquery-1.10.2.min.js"></script> | <script src="~/Content/jquery/jquery-1.10.2.min.js"></script> | ||||
@@ -173,23 +175,23 @@ | |||||
@Html.AppendJsFile("/Views/Login/ACLogon.js") | @Html.AppendJsFile("/Views/Login/ACLogon.js") | ||||
@*<script> | @*<script> | ||||
//点击版本号,显示版本号历史进程 | |||||
$('.versionBtn').click(function () { | |||||
var html = '<div class="process"><div class="proTitle">历史进程</div><div class="pro_sec1">'; | |||||
$.each(@(new HtmlString(ViewBag.VersionList)), function (i, item) { | |||||
var index = i % 2 == 0 ? 1 : 2; | |||||
html += '<div class="proBox proBox'+index+'">' + item.Content + '<div class="edition">' + item.VersionNum + '</div><div class="time">' + item.UpdateTime.slice(0,item.UpdateTime.indexOf("T"))+'</div></div>' ; | |||||
}); | |||||
html += '</div></div>'; | |||||
//点击版本号,显示版本号历史进程 | |||||
$('.versionBtn').click(function () { | |||||
var html = '<div class="process"><div class="proTitle">历史进程</div><div class="pro_sec1">'; | |||||
$.each(@(new HtmlString(ViewBag.VersionList)), function (i, item) { | |||||
var index = i % 2 == 0 ? 1 : 2; | |||||
html += '<div class="proBox proBox'+index+'">' + item.Content + '<div class="edition">' + item.VersionNum + '</div><div class="time">' + item.UpdateTime.slice(0,item.UpdateTime.indexOf("T"))+'</div></div>' ; | |||||
}); | |||||
html += '</div></div>'; | |||||
layer.open({ | |||||
type: 1, | |||||
closeBtn: 2, | |||||
title: "版本号", | |||||
area: ['888px', '60%'], | |||||
content: html | |||||
layer.open({ | |||||
type: 1, | |||||
closeBtn: 2, | |||||
title: "版本号", | |||||
area: ['888px', '60%'], | |||||
content: html | |||||
}); | |||||
}); | }); | ||||
}); | |||||
</script>*@ | |||||
</script>*@ | |||||
</body> | </body> | ||||
</html> | </html> |
@@ -69,6 +69,7 @@ | |||||
$("#lr_verifycode_input").val(''); | $("#lr_verifycode_input").val(''); | ||||
$("#lr_verifycode_img").attr("src", $.rootUrl + "/Login/VerifyCode?time=" + Math.random()); | $("#lr_verifycode_img").attr("src", $.rootUrl + "/Login/VerifyCode?time=" + Math.random()); | ||||
}); | }); | ||||
//错误次数 | |||||
var errornum = $('#errornum').val(); | var errornum = $('#errornum').val(); | ||||
if (errornum >= 3) { | if (errornum >= 3) { | ||||
@@ -121,6 +122,12 @@ | |||||
var $username = $("#lr_username"), $password = $("#lr_password"), $verifycode = $("#lr_verifycode_input"); | var $username = $("#lr_username"), $password = $("#lr_password"), $verifycode = $("#lr_verifycode_input"); | ||||
var username = $.trim($username.val()), password = $.trim($password.val()), verifycode = $.trim($verifycode.val()); | var username = $.trim($username.val()), password = $.trim($password.val()), verifycode = $.trim($verifycode.val()); | ||||
var up = true; | var up = true; | ||||
var defaultPwdTip = false;//用户输入的密码不是初始密码,不需要提示; | |||||
if ($("#DefaultPwd").attr('data-IsSetDefaultPwd').toLowerCase() == "true" || $("#DefaultPwd").attr('data-IsSetDefaultPwd').toLowerCase() == true) { | |||||
if ($("#DefaultPwd").val() == password) { | |||||
defaultPwdTip = true; | |||||
} | |||||
} | |||||
if (username == "") { | if (username == "") { | ||||
lrPage.tip('请输入账户'); | lrPage.tip('请输入账户'); | ||||
@@ -132,6 +139,7 @@ | |||||
$password.focus(); | $password.focus(); | ||||
return false; | return false; | ||||
} | } | ||||
//强密码验证 | |||||
var reg = /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*,\.])[0-9a-zA-Z!@#$%^&*,\.]{8,20}$/; | var reg = /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*,\.])[0-9a-zA-Z!@#$%^&*,\.]{8,20}$/; | ||||
if (!reg.test(password)) { | if (!reg.test(password)) { | ||||
up = false; | up = false; | ||||
@@ -154,7 +162,7 @@ | |||||
$.ajax({ | $.ajax({ | ||||
url: $.rootUrl + "/Login/CheckLogin", | url: $.rootUrl + "/Login/CheckLogin", | ||||
headers: { __RequestVerificationToken: $.lrToken }, | headers: { __RequestVerificationToken: $.lrToken }, | ||||
data: { username: username, password: password, verifycode: verifycode, up: up }, | |||||
data: { username: username, password: password, verifycode: verifycode, up: up, defaultPwdTip: defaultPwdTip }, | |||||
type: "post", | type: "post", | ||||
dataType: "json", | dataType: "json", | ||||
success: function (res) { | success: function (res) { | ||||
@@ -163,11 +171,20 @@ | |||||
window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/SSOSystem/Index"; | window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/SSOSystem/Index"; | ||||
} else { | } else { | ||||
if (res.data.pwd == true) { | if (res.data.pwd == true) { | ||||
window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/Home/Index?pwd=true"; | |||||
if (res.data.pwdtip == true) { | |||||
window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/Home/Index?pwdpwdtip=true"; | |||||
} else { | |||||
window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/Home/Index?pwd=true"; | |||||
} | |||||
} | |||||
else { | |||||
if (res.data.pwdtip == true) { | |||||
window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/Home/Index?pwdtip=true"; | |||||
} else { | |||||
window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/Home/Index"; | |||||
} | |||||
//window.location.href = "/Home/Index"; | |||||
} | } | ||||
else | |||||
window.location.href = DigitalschoolMisLoginurl + "?F_Account=" + username + "&returnurl=" + Returnurl + "/Home/Index"; | |||||
//window.location.href = "/Home/Index"; | |||||
} | } | ||||
} | } | ||||
else if (res.code == 400) { | else if (res.code == 400) { | ||||
@@ -163,4 +163,8 @@ | |||||
<add key="QJUrl" value="www.qj.com"/> | <add key="QJUrl" value="www.qj.com"/> | ||||
<!--系主任角色Id--> | <!--系主任角色Id--> | ||||
<add key="DeptDirectorRoleId" value="cccde0ce-ebfe-41f2-9a78-e49aaa21cd5a" /> | <add key="DeptDirectorRoleId" value="cccde0ce-ebfe-41f2-9a78-e49aaa21cd5a" /> | ||||
<!-- 登录次数限制:登录连续错误要禁止登录 --> | |||||
<add key="ForbidLoginNum" value="5"/> | |||||
<!-- 禁止登录时间(分钟) --> | |||||
<add key="ForbidLoginMinutes" value="10"/> | |||||
</appSettings> | </appSettings> |