diff --git a/Infrastructure/App/App.cs b/Infrastructure/App/App.cs index 1bde3c6..eb083f2 100644 --- a/Infrastructure/App/App.cs +++ b/Infrastructure/App/App.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Hosting; +using Infrastructure.Model; +using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; diff --git a/Infrastructure/Infrastructure.csproj b/Infrastructure/Infrastructure.csproj index ba84635..57a874c 100644 --- a/Infrastructure/Infrastructure.csproj +++ b/Infrastructure/Infrastructure.csproj @@ -2,6 +2,9 @@ net7.0 + + 8632 + @@ -16,6 +19,7 @@ + diff --git a/ZR.Admin.WebApi/Framework/JwtUtil.cs b/Infrastructure/JwtUtil.cs similarity index 88% rename from ZR.Admin.WebApi/Framework/JwtUtil.cs rename to Infrastructure/JwtUtil.cs index 88423b8..f8787f7 100644 --- a/ZR.Admin.WebApi/Framework/JwtUtil.cs +++ b/Infrastructure/JwtUtil.cs @@ -1,14 +1,20 @@ -using Microsoft.IdentityModel.Tokens; +using Infrastructure.Extensions; +using Infrastructure.Model; +using Infrastructure.WebExtensins; +using Microsoft.AspNetCore.Http; +using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; +using System; +using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; +using System.Linq; using System.Security.Claims; using System.Text; -using ZR.Model.System.Dto; -namespace ZR.Admin.WebApi.Framework +namespace Infrastructure { /// - /// 2020-11-20 + /// 2023-8-29已从WebApi移至此 /// public class JwtUtil { @@ -17,7 +23,7 @@ namespace ZR.Admin.WebApi.Framework /// /// /// - public static LoginUser GetLoginUser(HttpContext httpContext) + public static TokenModel GetLoginUser(HttpContext httpContext) { string token = httpContext.GetToken(); @@ -53,7 +59,7 @@ namespace ZR.Admin.WebApi.Framework IssuedAt = authTime,//token生成时间 Expires = expiresAt, //NotBefore = authTime, - TokenType = "Bearer", + TokenType = jwtSettings.TokenType, //对称秘钥,签名证书 SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; @@ -118,18 +124,18 @@ namespace ZR.Admin.WebApi.Framework /// /// /// - public static LoginUser? ValidateJwtToken(JwtSecurityToken jwtSecurityToken) + public static TokenModel? ValidateJwtToken(JwtSecurityToken jwtSecurityToken) { try { if (jwtSecurityToken == null) return null; IEnumerable claims = jwtSecurityToken?.Claims; - LoginUser loginUser = null; + TokenModel loginUser = null; var userData = claims.FirstOrDefault(x => x.Type == ClaimTypes.UserData)?.Value; if (userData != null) { - loginUser = JsonConvert.DeserializeObject(userData); + loginUser = JsonConvert.DeserializeObject(userData); loginUser.ExpireTime = jwtSecurityToken.ValidTo; } return loginUser; @@ -146,7 +152,7 @@ namespace ZR.Admin.WebApi.Framework /// /// /// - public static List AddClaims(LoginUser user) + public static List AddClaims(TokenModel user) { var claims = new List() { diff --git a/Infrastructure/OptionsSetting.cs b/Infrastructure/Model/OptionsSetting.cs similarity index 92% rename from Infrastructure/OptionsSetting.cs rename to Infrastructure/Model/OptionsSetting.cs index 7befae4..50097a6 100644 --- a/Infrastructure/OptionsSetting.cs +++ b/Infrastructure/Model/OptionsSetting.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Infrastructure +namespace Infrastructure.Model { /// /// 获取配置文件POCO实体类 @@ -80,6 +80,14 @@ namespace Infrastructure /// token时间(分) /// public int Expire { get; set; } = 1440; + /// + /// 刷新token时长 + /// + public int RefreshTokenTime { get; set; } + /// + /// token类型 + /// + public string TokenType { get; set; } = "Bearer"; } public class Gen diff --git a/ZR.Model/System/Dto/LoginUser.cs b/Infrastructure/Model/TokenModel.cs similarity index 74% rename from ZR.Model/System/Dto/LoginUser.cs rename to Infrastructure/Model/TokenModel.cs index 3923582..bdfd86a 100644 --- a/ZR.Model/System/Dto/LoginUser.cs +++ b/Infrastructure/Model/TokenModel.cs @@ -1,11 +1,10 @@ -using System.Linq; +using System; +using System.Collections.Generic; +using System.Linq; -namespace ZR.Model.System.Dto +namespace Infrastructure.Model { - /// - /// 登录用户信息存储 - /// - public class LoginUser + public class TokenModel { public long UserId { get; set; } public long DeptId { get; set; } @@ -26,15 +25,15 @@ namespace ZR.Model.System.Dto /// 权限集合 /// //public List Permissions { get; set; } = new List(); - public LoginUser() + public TokenModel() { } - public LoginUser(SysUser user, List roles) + public TokenModel(TokenModel info, List roles) { - UserId = user.UserId; - UserName = user.UserName; - DeptId = user.DeptId; + UserId = info.UserId; + UserName = info.UserName; + DeptId = info.DeptId; Roles = roles; RoleIds = roles.Select(f => f.RoleKey).ToList(); } diff --git a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index 3a17ebf..2080ef9 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -1,10 +1,7 @@ -using IPTools.Core; -using Lazy.Captcha.Core; +using Lazy.Captcha.Core; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; -using UAParser; using ZR.Admin.WebApi.Filters; -using ZR.Admin.WebApi.Framework; using ZR.Model.System; using ZR.Model.System.Dto; using ZR.Service.System; @@ -86,7 +83,7 @@ namespace ZR.Admin.WebApi.Controllers.System //权限集合 eg *:*:*,system:user:list List permissions = permissionService.GetMenuPermission(user); - LoginUser loginUser = new(user, roles.Adapt>()); + TokenModel loginUser = new(user.Adapt(), roles.Adapt>()); CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.UserId, permissions); return SUCCESS(JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser))); } diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs index 71e3d87..81b1857 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/SysUserOnlineController.cs @@ -1,5 +1,4 @@ -using Infrastructure.Constant; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using ZR.Admin.WebApi.Filters; using ZR.Admin.WebApi.Hubs; diff --git a/ZR.Admin.WebApi/Extensions/DataPermi.cs b/ZR.Admin.WebApi/Extensions/DataPermi.cs index a313987..7d22f01 100644 --- a/ZR.Admin.WebApi/Extensions/DataPermi.cs +++ b/ZR.Admin.WebApi/Extensions/DataPermi.cs @@ -1,7 +1,5 @@ -using Infrastructure; +using SqlSugar; using SqlSugar.IOC; -using SqlSugar; -using ZR.Admin.WebApi.Framework; using ZR.Model.System; namespace ZR.Admin.WebApi.Extensions diff --git a/ZR.Admin.WebApi/Extensions/DbExtension.cs b/ZR.Admin.WebApi/Extensions/DbExtension.cs index efdefac..8cba189 100644 --- a/ZR.Admin.WebApi/Extensions/DbExtension.cs +++ b/ZR.Admin.WebApi/Extensions/DbExtension.cs @@ -1,4 +1,3 @@ -using Infrastructure; using Infrastructure.Extensions; using SqlSugar; using SqlSugar.IOC; diff --git a/ZR.Admin.WebApi/Extensions/LogoExtension.cs b/ZR.Admin.WebApi/Extensions/LogoExtension.cs index 71f86e1..f08181f 100644 --- a/ZR.Admin.WebApi/Extensions/LogoExtension.cs +++ b/ZR.Admin.WebApi/Extensions/LogoExtension.cs @@ -14,7 +14,7 @@ namespace Infrastructure Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("🎉源码地址: https://gitee.com/izory/ZrAdminNetCore"); Console.WriteLine("📖官方文档:http://www.izhaorui.cn/doc"); - Console.WriteLine("🤑打赏作者:http://www.izhaorui.cn/doc/support.html"); + Console.WriteLine("💰打赏作者:http://www.izhaorui.cn/doc/support.html"); Console.WriteLine("📱移动端体验:http://www.izhaorui.cn/h5"); } } diff --git a/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs b/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs index 7e085d8..831e0d6 100644 --- a/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs +++ b/ZR.Admin.WebApi/Filters/ActionPermissionFilter.cs @@ -1,10 +1,6 @@ -using Infrastructure.Extensions; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; -using System.Data; -using ZR.Admin.WebApi.Framework; using ZR.Model.System; -using ZR.Model.System.Dto; using ZR.Service.System; using ZR.Service.System.IService; @@ -41,7 +37,7 @@ namespace ZR.Admin.WebApi.Filters /// public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { - LoginUser info = JwtUtil.GetLoginUser(context.HttpContext); + TokenModel info = JwtUtil.GetLoginUser(context.HttpContext); if (info != null && info?.UserId > 0) { @@ -79,7 +75,7 @@ namespace ZR.Admin.WebApi.Filters string[] denyPerms = new string[] { "update", "add", "remove", "add", "edit", "delete", "import", "run", "start", "stop", "clear", "send", "export", "upload", "common", "gencode", "reset" }; if (isDemoMode && denyPerms.Any(f => Permission.ToLower().Contains(f))) { - context.Result = new JsonResult(new { code = ResultCode.FORBIDDEN, msg = "演示模式 , 不允许操作" }); + context.Result = new JsonResult(new { code = (int)ResultCode.FORBIDDEN, msg = "演示模式 , 不允许操作" }); } if (!HasPermi && !Permission.Equals("common")) { diff --git a/ZR.Admin.WebApi/Filters/VerifyAttribute.cs b/ZR.Admin.WebApi/Filters/VerifyAttribute.cs index 7ea4078..aa6b480 100644 --- a/ZR.Admin.WebApi/Filters/VerifyAttribute.cs +++ b/ZR.Admin.WebApi/Filters/VerifyAttribute.cs @@ -2,8 +2,6 @@ using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; using NLog; -using ZR.Admin.WebApi.Framework; -using ZR.Model.System.Dto; namespace ZR.Admin.WebApi.Filters { @@ -36,7 +34,7 @@ namespace ZR.Admin.WebApi.Filters var isAuthed = context.HttpContext.User.Identity.IsAuthenticated; //使用jwt token校验2020-11-21 - LoginUser loginUser = JwtUtil.GetLoginUser(context.HttpContext); + TokenModel loginUser = JwtUtil.GetLoginUser(context.HttpContext); if (loginUser != null) { var nowTime = DateTime.UtcNow; @@ -56,7 +54,7 @@ namespace ZR.Admin.WebApi.Filters if (loginUser == null || !isAuthed) { string msg = $"请求访问[{url}]失败,无法访问系统资源"; - logger.Info($"{msg}"); + //logger.Info(msg); context.Result = new JsonResult(new ApiResult((int)ResultCode.DENY, msg)); } diff --git a/Infrastructure/Constant/HubsConstant.cs b/ZR.Admin.WebApi/Hubs/HubsConstant.cs similarity index 91% rename from Infrastructure/Constant/HubsConstant.cs rename to ZR.Admin.WebApi/Hubs/HubsConstant.cs index 929872c..8142dc3 100644 --- a/Infrastructure/Constant/HubsConstant.cs +++ b/ZR.Admin.WebApi/Hubs/HubsConstant.cs @@ -1,4 +1,4 @@ -namespace Infrastructure.Constant +namespace ZR.Admin.WebApi.Hubs { public class HubsConstant { diff --git a/ZR.Admin.WebApi/Hubs/MessageHub.cs b/ZR.Admin.WebApi/Hubs/MessageHub.cs index a0ba360..4e64b69 100644 --- a/ZR.Admin.WebApi/Hubs/MessageHub.cs +++ b/ZR.Admin.WebApi/Hubs/MessageHub.cs @@ -1,5 +1,4 @@ -using Infrastructure.Constant; -using IPTools.Core; +using IPTools.Core; using Microsoft.AspNetCore.SignalR; using System.Web; using UAParser; @@ -81,7 +80,7 @@ namespace ZR.Admin.WebApi.Hubs userInfo.TodayOnlineTime = 0; } var clientUser = onlineClients.Find(x => x.Userid == userid); - userInfo.TodayOnlineTime += clientUser?.OnlineTime ?? 0; + userInfo.TodayOnlineTime += Math.Round(clientUser?.OnlineTime ?? 0, 2); } //给当前所有登录当前账号的用户下发登录时长 var connIds = onlineClients.Where(f => f.Userid == userid).ToList(); @@ -123,7 +122,7 @@ namespace ZR.Admin.WebApi.Hubs { userInfo.TodayOnlineTime += user?.OnlineTime ?? 0; } - Log.WriteLine(ConsoleColor.Green, msg: $"用户{user?.Name}离开了,已在线{userInfo?.TodayOnlineTime}分,当前已连接{onlineClients.Count}个"); + Log.WriteLine(ConsoleColor.Red, msg: $"用户{user?.Name}离开了,已在线{userInfo?.TodayOnlineTime}分,当前已连接{onlineClients.Count}个"); } return base.OnDisconnectedAsync(exception); } diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs index f6d29bb..662ce75 100644 --- a/ZR.Admin.WebApi/Program.cs +++ b/ZR.Admin.WebApi/Program.cs @@ -1,16 +1,13 @@ using AspNetCoreRateLimit; -using Infrastructure; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.DataProtection; using Microsoft.IdentityModel.Tokens; using System.Text.Json.Serialization; using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; -using ZR.Admin.WebApi.Framework; using ZR.Admin.WebApi.Hubs; using ZR.Admin.WebApi.Middleware; using ZR.Common.Cache; -using ZR.Model.System.Dto; var builder = WebApplication.CreateBuilder(args); diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 870be2a..32e0cbe 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -17,7 +17,6 @@ - diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index 17baa36..de5b1cb 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -30,7 +30,8 @@ "Audience": "ZRAdmin.NET", //指该token是服务于哪个群体的(群体范围) "SecretKey": "SecretKey-ZRADMIN.NET-20210101", "Expire": 1440, //jwt登录过期时间(分) - "refreshTokenTime": 5 + "RefreshTokenTime": 5,//分钟 + "TokenType": "Bearer" }, "InjectClass": [ "ZR.Repository", "ZR.Service", "ZR.Tasks" ], //自动注入类 "ShowDbLog": true, //是否打印db日志 diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index 2466e02..23378eb 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -1,5 +1,6 @@ using Infrastructure; using Infrastructure.Extensions; +using Infrastructure.Model; using JinianNet.JNTemplate; using SqlSugar; using System; diff --git a/ZR.CodeGenerator/DbProvider.cs b/ZR.CodeGenerator/DbProvider.cs index da58700..e4a0191 100644 --- a/ZR.CodeGenerator/DbProvider.cs +++ b/ZR.CodeGenerator/DbProvider.cs @@ -1,4 +1,5 @@ using Infrastructure; +using Infrastructure.Model; using SqlSugar; using System; using System.Collections.Generic; diff --git a/ZR.CodeGenerator/Service/CodeGeneraterService.cs b/ZR.CodeGenerator/Service/CodeGeneraterService.cs index 85024e6..101a18e 100644 --- a/ZR.CodeGenerator/Service/CodeGeneraterService.cs +++ b/ZR.CodeGenerator/Service/CodeGeneraterService.cs @@ -1,4 +1,5 @@ using Infrastructure; +using Infrastructure.Model; using SqlSugar; using System.Collections.Generic; using System.Linq; diff --git a/ZR.Common/MailHelper.cs b/ZR.Common/MailHelper.cs index 79b8b3d..22f01c2 100644 --- a/ZR.Common/MailHelper.cs +++ b/ZR.Common/MailHelper.cs @@ -1,4 +1,5 @@ using Infrastructure; +using Infrastructure.Model; using MailKit.Net.Smtp; using MimeKit; using MimeKit.Text; diff --git a/ZR.Service/System/SysFileService.cs b/ZR.Service/System/SysFileService.cs index 6573363..55d458a 100644 --- a/ZR.Service/System/SysFileService.cs +++ b/ZR.Service/System/SysFileService.cs @@ -1,6 +1,7 @@ using Infrastructure; using Infrastructure.Attribute; using Infrastructure.Extensions; +using Infrastructure.Model; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; using System;