From 6778472e04ec092e566fb950d0427095dabcae18 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期五, 08 十一月 2024 19:37:36 +0800
Subject: [PATCH] Create WIDESEAWCS_Communicator.DLL使用说明文档2024-11-08.pdf
---
WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs | 71 +++++++++++++++++++++++++++++++++--
1 files changed, 66 insertions(+), 5 deletions(-)
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs
index e4451c4..3c9aaeb 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs
@@ -9,32 +9,40 @@
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
+using WIDESEAWCS_Core.Authorization;
using WIDESEAWCS_Core.Const;
using WIDESEAWCS_Core.DB;
+using WIDESEAWCS_Core.Extensions;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.Seed;
+using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Core.HttpContextUser
{
public class AspNetUser : IUser
{
private readonly IHttpContextAccessor _accessor;
+ private readonly ICacheService _cacheService;
//private readonly ILogger<AspNetUser> _logger;
- public AspNetUser(IHttpContextAccessor accessor/*, ILogger<AspNetUser> logger*/)
+ public AspNetUser(IHttpContextAccessor accessor, ICacheService cacheService)
{
_accessor = accessor;
+ _cacheService = cacheService;
/*_logger = logger;*/
}
public string UserName => GetUserInfoFromToken(ClaimTypes.Name).FirstOrDefault() ?? "";
public int UserId => GetClaimValueByType(JwtRegisteredClaimNames.Jti) == null ? 0 : GetClaimValueByType(JwtRegisteredClaimNames.Jti).FirstOrDefault()?.ObjToInt() ?? 0;
+
public long TenantId => GetUserInfoFromToken(nameof(TenantId)).FirstOrDefault()?.ObjToLong() ?? -1;
public int RoleId => GetUserInfoFromToken(ClaimTypes.Role).FirstOrDefault()?.ObjToInt() ?? 0;
public string Token => GetToken();
+
+ public int MenuType => (_accessor.HttpContext?.Request.Headers.ContainsKey("uniapp") ?? false) ? 1 : 0;
public bool IsAuthenticated()
{
@@ -43,7 +51,45 @@
public string GetToken()
{
- return _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? "";
+ string token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? "";
+ if (!token.IsNullOrEmpty())
+ {
+ return token;
+ }
+ if (_accessor.HttpContext?.IsSuccessSwagger() == true)
+ {
+ token = _accessor.HttpContext.GetSuccessSwaggerJwt();
+ if (token.IsNotEmptyOrNull())
+ {
+ //UserInfo userInfo = JwtHelper.SerializeJwt(token);
+ //if (userInfo.UserId > 0)
+ //{
+ // return token;
+ //}
+ List<Claim> claims1 = _accessor.HttpContext.User.Claims.ToList();
+ if (_accessor.HttpContext.User.Claims.Any(s => s.Type == JwtRegisteredClaimNames.Jti))
+ {
+ return token;
+ }
+
+ var claims = new ClaimsIdentity(GetClaimsIdentity(token));
+ _accessor.HttpContext.User.AddIdentity(claims);
+ return token;
+ }
+ }
+ token = _cacheService.Get(UserId.ToString());
+ if (!string.IsNullOrEmpty(token)) { return token; }
+ return token;
+
+ // string token = _cacheService.Get(UserId.ToString());
+ //if (!string.IsNullOrEmpty(token)) { return token; }
+ //return string.Empty;
+ //return _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", "") ?? "";
+ }
+
+ public void UpdateToke(string token)
+ {
+ _cacheService.AddOrUpdate(UserId.ToString(), token);
}
public bool IsSuperAdmin => IsRoleIdSuperAdmin(RoleId);
@@ -59,9 +105,10 @@
{
JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token);
- return (from item in jwtToken.Claims
- where item.Type == ClaimType
- select item.Value).ToList();
+ List<string> items = (from item in jwtToken.Claims
+ where item.Type == ClaimType
+ select item.Value).ToList();
+ return items;
}
return new List<string>() { };
@@ -83,6 +130,20 @@
return ArraySegment<Claim>.Empty;
}
+ public IEnumerable<Claim> GetClaimsIdentity(string token)
+ {
+ var jwtHandler = new JwtSecurityTokenHandler();
+ // token鏍¢獙
+ if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token))
+ {
+ var jwtToken = jwtHandler.ReadJwtToken(token);
+
+ return jwtToken.Claims;
+ }
+
+ return new List<Claim>();
+ }
+
public List<string> GetClaimValueByType(string ClaimType)
{
return (from item in GetClaimsIdentity()
--
Gitblit v1.9.3