using Microsoft.AspNetCore.Authorization; using System.Text; using WMS.BZModels.Dto.HJ.WareHouseDtos; using WMS.BZUtil; using WMS.BZWeb.Extensions; using WMS.Info; using WMS.Util; namespace WMS.BZWeb.Middleware { public class AuthorizeMiddleware { private readonly RequestDelegate _next; private readonly IOperator _operator; public AuthorizeMiddleware(RequestDelegate next, IOperator ioperator) { _next = next; _operator = ioperator; } /// /// 执行 /// /// 请求连接 /// public async Task Invoke(HttpContext httpContext) { //string url = SetUrl(httpContext); var endpoint = httpContext.GetEndpoint(); if (httpContext.Request.IsAjax() && endpoint != null && endpoint.Metadata.GetMetadata() == null) { // 获取请求值 if (!httpContext.Request.Headers["token"].IsEmpty()) { string token = httpContext.Request.Headers["token"].ToString(); var res = _operator.DecodeToken(token); if (res == "TokenExpiredException") { await RespondWithJson(httpContext.Response, new ResInfo { code = EResponseCode.nologin, info = "登录信息过期" }); return; } else if (res == "SignatureVerificationException") { await RespondWithJson(httpContext.Response, new ResInfo { code = EResponseCode.nologin, info = "非法密钥" }); return; } else { var payload = res.ToObject(); WebUtil.SetItem("account", payload.Account); WebUtil.SetItem("userId", payload.UserId); WebUtil.SetItem("userName", payload.UserName); WebUtil.SetItem("WarehouseNo", payload.WarehouseNo); WebUtil.SetItem("EncryptTokenNo", payload.EncryptTokenNo); } } else { await RespondWithJson(httpContext.Response, new ResInfo { code = EResponseCode.nologin, info = "权限验证失败" }); return; } } else { if (httpContext.Request.Query.ContainsKey("lrmcode")) { string mouldeCode = httpContext.Request.Query["lrmcode"]; WebUtil.SetItem("mouldeCode", mouldeCode); } if (httpContext.Request.Query.ContainsKey("lraccount")) { string account = httpContext.Request.Query["lraccount"]; WebUtil.SetItem("account", account); } } await _next(httpContext); return; } /// /// 设置url地址 /// /// 请求上下文 /// private string SetUrl(HttpContext httpContext) { string url = httpContext.Request.Path + httpContext.Request.QueryString.Value; WebUtil.SetItem("currentUrl", url); return url; } /// /// 返回请求信息 /// /// 返回头 /// 数据 /// private async Task RespondWithJson(HttpResponse response, object data) { response.StatusCode = 200; response.ContentType = "application/json;charset=utf-8"; await response.WriteAsync(data.ToJson(), new UTF8Encoding(false)); } } public class MiddlewareEx { private readonly RequestDelegate _next; public MiddlewareEx(RequestDelegate next) { _next = next; } /// /// 执行 /// /// 请求连接 /// public async Task Invoke(HttpContext httpContext) { await _next(httpContext); return; } } }