首页 > 其他分享 >.Net 6.0定义全局当前身份缓存对象

.Net 6.0定义全局当前身份缓存对象

时间:2023-03-27 10:45:14浏览次数:45  
标签:缓存 HttpContext token static 6.0 var Net public

背景:

  当前身份缓存对象顾名思义就是:当前登录的用户身份对象,那它解决了什么问题呢?其实在我们日常开发过程中经常能用的到几乎是必备的,就比如我给某个表插入数据时需要创建人或者一些权限的访问,都得用到当前身份缓存对象,当然啦今天的博客就是因为我们公司研发部门刚成立不久所以导致很多项目不完善,我在开发过程中就遇到了没有当前身份缓存对象的问题,开发极其不方便啊哈哈,所以我打算自己整一个,所以就有了今天的这篇文章,希望在对屏幕前的你也有所帮助!!

思路:

  我们登录后一些必要的用户数据存到Token中,我们只需要在请求头中拿到Token并将它解析出来,再通过数据库查询出来即可,做的好一点可以配合上Redis,但是不用Redis也无伤大雅,当然也会遇到一些小问题,比如HttpContext对象如何获取,我在这里的解决方案是,定义一个静态类然后在请求管道中拿到服务容器,再通过服务容器拿到IHttpContextAccessor服务,再点出HttpContext,再拿到请求头,是不是很简单,那我们就直接步入正题吧!!!各位看官献丑了哈哈哈哈

正题:

1.创建静态类ServiceLocator获取服务容器:

在这里解释一下为什么不直接注入IHttpContextAccessor服务再通过构造函数获取,因为这过程中会有遇到一个问题,在静态类中是不能有构造函数的,如果是直接把这个服务容器拿过来就可以完美的解决这个问题,先不着急在下面会体现(第三和第五点)

1 public static class ServiceLocator
2     {
3         public static IApplicationBuilder? Builder;
4     }

2.在请求管道中赋值

1 var app = builder.Build();
2 ServiceLocator.Builder = app;

3.创建HttpContext类并通过IHttpContextAccessor服务获取HttpContext

复制代码
1         /// <summary>
2         /// Http上下文对象
3         /// </summary>
4         public static HttpContext HttpContext => ServiceLocator.Builder!
5             .ApplicationServices
6             .GetRequiredService<IHttpContextAccessor>()
7             .HttpContext;
复制代码

4.创建Jwt帮助类,代码如下:

复制代码
 1  public static class JwtHelper
 2     {
 3         /// <summary>
 4         /// 解密Token成字典
 5         /// </summary>
 6         /// <returns></returns>
 7         public static Dictionary<string, string> GetTokenValue(string token)
 8         {
 9             var st = new JwtSecurityTokenHandler().ReadJwtToken(token);
10             var claims = st.Claims.ToList();
11             var res = new Dictionary<string, string>();
12             claims.ForEach(d =>
13             {
14                 res.Add(d.Type, d.Value);
15             });
16             return res;
17         }
18 
19     }
复制代码

5.创建当前身份缓存对象帮助类并将Token中信息解析,并查询响应

复制代码
 1  public static class CurUserInfoHelper
 2     {
 3         /// <summary>
 4         /// 当前身份缓存对象
 5         /// </summary>
 6         public static SysUserOutputWebDto? CurUserInfo => GetCurUserInfo();
 7 
 8         /// <summary>
 9         /// 获取当前用户身份缓存对象
10         /// </summary>
11         /// <returns></returns>
12         public static SysUserOutputWebDto GetCurUserInfo()
13         {
14             var result = new SysUserOutputWebDto();
15             var httpContext = HttpContextHelper.HttpContext;
16             var headrs = httpContext.Request.Headers;
17             var authorization = headrs["Authorization"];
18             string token = authorization!;
19             if (token.Contains("Bearer"))
20             {
21                 string[] tokenStr = authorization.ToString().Split(' ');
22                 token = tokenStr[1];
23             }
         //解密 24 var claims = JwtHelper.GetTokenValue(token); 25 var userId = claims["UserID"]; 26 if (!string.IsNullOrEmpty(userId)) 27 { 28 //非构造函数式注入服务 29 var serviceScope = ServiceLocator.Builder!.ApplicationServices.CreateScope(); 30 var sysUserEntityBL = serviceScope.ServiceProvider.GetService(typeof(ISysUserEntityBL)) as ISysUserEntityBL; 31 32 var sysUser = sysUserEntityBL!.GetSinge(d => d.Id == userId); 33 result = sysUser.AsOutputWebDto();//Entity转换为输出型Dto 34 } 35 return result; 36 } 37 38 }
复制代码

6.直接使用即可

1 var curUser =CurUserInfoHelper.CurUserInfo;

 效果如下图:

 结尾:

  今天的内容承接上篇Jwt加密篇,如果过程中有不清楚或者中断的地方可以回顾下上篇文章,也欢迎私信请教,或者在评论区探讨,本人还是个初入职场的小白如有不足的地方也希望大佬们能及时指出,好啦今天的内容就到这里了哦,如果对你有帮助就点个攒支持一下吧嘻嘻

本文来自博客园,作者:沈威,转载请注明原文链接:https://www.cnblogs.com/shenweif/p/17252674.html

标签:缓存,HttpContext,token,static,6.0,var,Net,public
From: https://www.cnblogs.com/wl-blog/p/17260734.html

相关文章

  • lucene4.5源码分析系列:索引缓存以及刷新
    缓存和刷新是比较重要的问题,它涉及到lucene如何管理内存和磁盘。前面提到索引的结果是缓存在内存中的,等到一定时候才会将其刷新到硬盘上去。缓存在这里的目的无非是缓解高速......
  • 【转】NETCore下IConfiguration和IOptions的用法
    新建一个NETCoreWebAPI项目,在Startup.cs里就会开始使用IConfiguration和IOptions了,我们来看看如何使用。IConfiguration是用来加载配置值的,可以加载内存键值对、JSON或X......
  • ASP.NET Core - 配置系统之配置读取
    一个应用要运行起来,往往需要读取很多的预设好的配置信息,根据约定好的信息或方式执行一定的行为。配置的本质就是软件运行的参数,在一个软件实现中需要的参数非常多,如果我们......
  • 记一次 .NET 某企业 ERP网站系统 崩溃分析
    一:背景1.讲故事前段时间收到了一个朋友的求助,说他的ERP网站系统会出现偶发性崩溃,找了好久也没找到是什么原因,让我帮忙看下,其实崩溃好说,用procdump自动抓一个就好,拿到......
  • neural-network-3b1b-watching-notes
    3B1B观看笔记Datetime:2023-03-26T23:20+08:00Categories:MachineLearningNeuralNetworksPlaylistonYoutubewhatismlp?costfunctionandparamsgradient......
  • swap交换空间设置及清空缓存的命令:
    linuxswap空间的swappiness=0 linux会使用硬盘的一部分做为SWAP分区,用来进行进程调度--进程是正在运行的程序--把当前不用的进程调成‘等待(standby)‘,甚至‘睡眠(slee......
  • [FastAPI-32]依赖注入缓存
    fromfastapiimportDepends,FastAPIapp=FastAPI()'''依赖注入缓存现象-依赖条件`get_num`被依赖了两次,但是你会发现其内部打印语句只打印了一次。也就是说,第......
  • Spatio-Temporal Representation With Deep Neural Recurrent Network in MIMO CSI Fe
    阅读文献《Spatio-TemporalRepresentationWithDeepNeuralRecurrentNetworkinMIMOCSIFeedback》​ 该文献的作者是天津大学的吴华明老师,在2020年5月发表于IEEE......
  • 2023 ASP.NET Core 开发者路线图
    链接ASP.NETCoreDeveloperRoadmap......
  • Kubernetes v1.25创建ServiceAccount未生成Secret问题
    说明kubernetesv1.24.0更新之后进行创建ServiceAccount不会自动生成Secret需要对其手动创建。网上的很多教程都没有创建Secret这步,应该是之前版本的教程,笔者使......