From 0b0df0052542313f11e660db0d79ab163104463a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 16 Apr 2024 18:00:51 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=80=80=E5=87=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LimitUserRequestAuthorization.cs | 17 +++++++++++++++-- .../_IRaCIS/Output/ApiResponseCodeEnum.cs | 16 +++++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index cf0e482bf..699f4450b 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -67,7 +67,10 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter if (string.IsNullOrWhiteSpace(cacheUserToken)) { //设置当前用户最新Token - await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromMinutes(minutes)); + await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromDays(7)); + + await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes)); + cacheUserToken = _userInfo.UserToken; @@ -75,7 +78,17 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter //是同一个人 else if (cacheUserToken == _userInfo.UserToken) { - await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromMinutes(minutes)); + var cacheTime = (await _provider.GetAsync($"{_userInfo.Id.ToString()}_Online")).Value; + + //过期了 需要自动退出 + if(string.IsNullOrEmpty(cacheTime)) + { + context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出"), ApiResponseCodeEnum.AutoLoginOut)); + } + else + { + await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes)); + } } else diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs index f96a2d6ba..58eb41fd6 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs @@ -18,7 +18,7 @@ namespace IRaCIS.Core.Infrastructure.Extention BusinessValidationFailed = 2, //数据不存在 - DataNotExist=3, + DataNotExist = 3, //程序异常 相当于之前的 IsSuccess = false ProgramException = 4, @@ -27,10 +27,10 @@ namespace IRaCIS.Core.Infrastructure.Extention //需要提示 ,需要提示 从Result 取数据 ( 0 可以继续处理提交 ,1 不能进行继续处理提交 ,2 刷新列表 ) - NeedTips = 5, + NeedTips = 5, - CloseCurrentWindows=6, + CloseCurrentWindows = 6, @@ -38,15 +38,17 @@ namespace IRaCIS.Core.Infrastructure.Extention //在其他地方登陆,被迫下线 LoginInOtherPlace = -1, + AutoLoginOut = -2, + //没有带token访问(未登陆) - NoToken=10, + NoToken = 10, //带了Token,但是没有相应权限(该用户类型不能做) - HaveTokenNotAccess=11 + HaveTokenNotAccess = 11 } - - + + } From c6dd323b80d5c92d92fa564f79da7ffe4a3d49e1 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 17 Apr 2024 11:19:11 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessFilter/LimitUserRequestAuthorization.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index 699f4450b..49f9f7d5f 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -65,7 +65,7 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter //缓存中没有取到Token if (string.IsNullOrWhiteSpace(cacheUserToken)) - { + {2 //设置当前用户最新Token await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromDays(7)); @@ -83,7 +83,7 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter //过期了 需要自动退出 if(string.IsNullOrEmpty(cacheTime)) { - context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出"), ApiResponseCodeEnum.AutoLoginOut)); + context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出"), ApiResponseCodeEnum.AutoLoginOut); } else { From 3a8e400f339b8ebd3a545964f533ce2da7dd36ba Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 17 Apr 2024 11:19:11 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessFilter/LimitUserRequestAuthorization.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index 699f4450b..16fd27c22 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -83,7 +83,7 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter //过期了 需要自动退出 if(string.IsNullOrEmpty(cacheTime)) { - context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出"), ApiResponseCodeEnum.AutoLoginOut)); + context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出"), ApiResponseCodeEnum.AutoLoginOut); } else { From b1c0933428b8b03116922b73f41b227bb85bdd71 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 17 Apr 2024 11:22:04 +0800 Subject: [PATCH 4/8] x --- .../BusinessFilter/LimitUserRequestAuthorization.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index 49f9f7d5f..16fd27c22 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -65,7 +65,7 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter //缓存中没有取到Token if (string.IsNullOrWhiteSpace(cacheUserToken)) - {2 + { //设置当前用户最新Token await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromDays(7)); From fc579d9cf4b07e6f15532f72722e448d099791b2 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 17 Apr 2024 11:35:30 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/appsettings.Event_IRC.json | 3 ++- IRaCIS.Core.API/appsettings.Prod_IRC.json | 3 ++- IRaCIS.Core.API/appsettings.US_IRC.json | 3 ++- IRaCIS.Core.API/appsettings.Uat_IRC.json | 3 ++- .../BusinessFilter/LimitUserRequestAuthorization.cs | 2 ++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.API/appsettings.Event_IRC.json b/IRaCIS.Core.API/appsettings.Event_IRC.json index 43bdc06ee..7aef9a78c 100644 --- a/IRaCIS.Core.API/appsettings.Event_IRC.json +++ b/IRaCIS.Core.API/appsettings.Event_IRC.json @@ -41,7 +41,8 @@ "OpenLoginLimit": true, "LoginMaxFailCount": 5, - "LoginFailLockMinutes": 30 + "LoginFailLockMinutes": 30, + "AutoLoginOutMinutes": 60 }, "SystemEmailSendConfig": { diff --git a/IRaCIS.Core.API/appsettings.Prod_IRC.json b/IRaCIS.Core.API/appsettings.Prod_IRC.json index 11b9ff698..268d39500 100644 --- a/IRaCIS.Core.API/appsettings.Prod_IRC.json +++ b/IRaCIS.Core.API/appsettings.Prod_IRC.json @@ -42,7 +42,8 @@ "OpenLoginLimit": true, "LoginMaxFailCount": 5, - "LoginFailLockMinutes": 30 + "LoginFailLockMinutes": 30, + "AutoLoginOutMinutes": 60 }, "SystemEmailSendConfig": { diff --git a/IRaCIS.Core.API/appsettings.US_IRC.json b/IRaCIS.Core.API/appsettings.US_IRC.json index 654637a8c..fe1312e46 100644 --- a/IRaCIS.Core.API/appsettings.US_IRC.json +++ b/IRaCIS.Core.API/appsettings.US_IRC.json @@ -60,7 +60,8 @@ "LoginMaxFailCount": 5, - "LoginFailLockMinutes": 30 + "LoginFailLockMinutes": 30, + "AutoLoginOutMinutes": 60 }, "SystemEmailSendConfig": { diff --git a/IRaCIS.Core.API/appsettings.Uat_IRC.json b/IRaCIS.Core.API/appsettings.Uat_IRC.json index aff99beba..f189aa5ef 100644 --- a/IRaCIS.Core.API/appsettings.Uat_IRC.json +++ b/IRaCIS.Core.API/appsettings.Uat_IRC.json @@ -44,7 +44,8 @@ "OpenLoginLimit": true, "LoginMaxFailCount": 5, - "LoginFailLockMinutes": 30 + "LoginFailLockMinutes": 30, + "AutoLoginOutMinutes": 60 }, "SystemEmailSendConfig": { diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index 16fd27c22..3b646880f 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -83,6 +83,8 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter //过期了 需要自动退出 if(string.IsNullOrEmpty(cacheTime)) { + context.HttpContext.Response.ContentType = "application/json"; + context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出"), ApiResponseCodeEnum.AutoLoginOut); } else From 7bf097c127d6666657e2d38ee55d3cd35bc25158 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 17 Apr 2024 12:20:01 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=80=80=E5=87=BA=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LimitUserRequestAuthorization.cs | 16 +++++++++++----- .../Service/Management/UserService.cs | 11 ++++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index 3b646880f..911501c48 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -60,37 +60,43 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["LimitUser_AuthTokenMissing"])); } + + //2、在这里取缓存 进行比较 看是否有其他人进行了登陆,如果其他人登陆了,就把之前用户挤掉 var cacheUserToken = (await _provider.GetAsync(_userInfo.Id.ToString())).Value; + + //缓存中没有取到Token if (string.IsNullOrWhiteSpace(cacheUserToken)) { + cacheUserToken = _userInfo.UserToken; + //设置当前用户最新Token await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromDays(7)); - await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes)); - cacheUserToken = _userInfo.UserToken; - } //是同一个人 else if (cacheUserToken == _userInfo.UserToken) { + var cacheTime = (await _provider.GetAsync($"{_userInfo.Id.ToString()}_Online")).Value; //过期了 需要自动退出 - if(string.IsNullOrEmpty(cacheTime)) + if (string.IsNullOrEmpty(cacheTime)) { context.HttpContext.Response.ContentType = "application/json"; context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; - context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出"), ApiResponseCodeEnum.AutoLoginOut); + context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出", ApiResponseCodeEnum.AutoLoginOut)); + } else { await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes)); } + } else diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 438b88d3e..95c6f0a69 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -15,6 +15,7 @@ using Medallion.Threading; using EasyCaching.Core; using IRaCIS.Core.Application.Contracts; using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO; +using OfficeOpenXml.FormulaParsing.Utilities; namespace IRaCIS.Application.Services { @@ -691,10 +692,14 @@ namespace IRaCIS.Application.Services userLoginReturnModel.BasicInfo = loginUser; - // 登录 清除缓存 - _cache.Remove(userLoginReturnModel.BasicInfo.Id.ToString()); - + // 登录 清除缓存 + //_cache.Remove(userLoginReturnModel.BasicInfo.Id.ToString()); + + var userId = loginUser.Id; + await _cache.SetAsync($"{userId.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(_verifyConfig.CurrentValue.AutoLoginOutMinutes)); + + return ResponseOutput.Ok(userLoginReturnModel); } From f85ac8a813bd4168215ccdd199e0400b33131914 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 17 Apr 2024 12:23:38 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessFilter/LimitUserRequestAuthorization.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index 911501c48..a9d0e52b0 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -88,7 +88,7 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter if (string.IsNullOrEmpty(cacheTime)) { context.HttpContext.Response.ContentType = "application/json"; - context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; + context.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden; context.Result = new JsonResult(ResponseOutput.NotOk("登录无操作超时自动退出", ApiResponseCodeEnum.AutoLoginOut)); } From 1ba9efe89442287d46dd6f56210946c8aaf3a58a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 17 Apr 2024 12:26:56 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=80=E5=87=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessFilter/LimitUserRequestAuthorization.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index a9d0e52b0..ace97f137 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -75,7 +75,7 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter //设置当前用户最新Token await _provider.SetAsync(_userInfo.Id.ToString(), _userInfo.UserToken, TimeSpan.FromDays(7)); - + await _provider.SetAsync($"{_userInfo.Id.ToString()}_Online", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMinutes(minutes)); } //是同一个人