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;
}
}
}