• 关于当前登陆人的确认,Session的运用


    在程序的各项操作中,常常需要获取当前登陆人,例如在做日志保存等操作的时候,以下是解决思路

    拦截器会处理各个接口请求,请求里token记录着当前用户信息,我们解析后将token存入Session中,确认了当前操作人。当我们在做日志处理的时候,只需要取出session存的用户信息就可以了

    以下是对Session的应用,先写个SessionHelper帮助类

    public class SessionHelper
        {
            public static HttpContext _httpContext;
    
            public static ISession _session => _httpContext.Session;
    
            /// <summary>
            /// session写入
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public static void Set(string key, string value)
            {
                _session.SetString(key, value);
            }
    
            /// <summary>
            /// session的读取
            /// </summary>
            /// <param name="key"></param>
            public static string Get(string key)
            {
                return _session.GetString(key);
            }
        }

    写好帮助类,我们直接在拦截器里运用,保存解析出的用户信息

     public Task Invoke(HttpContext httpContext)
    
            {
                //检测是否包含'Authorization'请求头,如果不包含则直接放行
                //登陆放行,预加载放行,文件上传放行
                if (httpContext.Request.Path.Value.Equals("/api/Login/Login") || httpContext.Request.Method == "OPTIONS")
                {
    
                    return _next(httpContext);
                }
                else if (httpContext.Request.Headers.ContainsKey("Authorization"))
                {
                    var tokenHeader = httpContext.Request.Headers["Authorization"];
    
    
                    TokenModel tm = JwtHelper.SerializeJWT(tokenHeader);
    
                    SessionHelper.Set("LoginName", tm.LoginName);//存入用户名
                    SessionHelper.Set("UserId", tm.Uid);//存入用户ID
                  
                    return _next(httpContext);
                }
                return null;
            }

    这样用户名和id就存入了Session中,我们去调用一下

     这个时候请求为空,这是容易忽略的错误,拦截器里面http请求并没有传入SessionHelper,我们少了一个步骤

    再运行

    还是报错,还忽略了一个步骤,Session需要在startup文件中进行注册

    配置好后,我们在控制器里取得了Session,该Session只能在控制器里用,如果换到服务层失效,,如果在其他层使用,需要使用 IHttpContextAccessor

  • 相关阅读:
    【性能诊断】十一、性能问题综合分析(案例2,windbg、wireshark)
    SQL Server常用的性能诊断语句
    Oracle常用的性能诊断语句
    【性能诊断】五、并发场景的性能分析(windbg简介及dump抓取)
    数据库管理与开发工具推荐---DBeaver
    DM达梦数据库---执行计划查看
    DM达梦数据库索引失效的处理---强制更新统计信息
    jProfiler、jMAT等工具注意设置启动的Xmx参数
    JVM启动参数建议
    Linux环境jcmd抓取进程信息及内存dump
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/10370801.html
Copyright © 2020-2023  润新知