using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using VueWebCoreApi.Models; namespace VueWebCoreApi.Tools { public class ChannelActionFilterAttribute: ActionFilterAttribute { ToMessage mes = new ToMessage(); RedisHelper redis = new RedisHelper(); /// /// 在Action执行前执行 /// /// public override void OnActionExecuting(ActionExecutingContext context) { try { //var aa = DapperHelper.GetTokenFromRequestHeader(); var token = context.HttpContext.Request.Headers["Token"].ToString(); User us = JwtTools.Denocode(token.ToString()); base.OnActionExecuting(context); //如果存在 if (redis.Get(us.rediskey, 0) !=null) { //获取redis中当前用户信息 User r_loginUser = redis.Get(us.rediskey, 0); if (token != r_loginUser.token) { mes.code = "303"; mes.count = 0; mes.message = "token已过期,请重新登录!"; context.Result = new JsonResult(mes); } else { //重置过期时间 redis.KeyExpire(us.rediskey, redis.secondsTimeOut); } } else //如果redis登录用户中不存在当前用户 { mes.code = "303"; mes.count = 0; mes.message = "登录已超时,请重新登录!"; context.Result = new JsonResult(mes); } // 将过滤器中的值存储在HttpContext.Items中,以便在控制器中访问 //context.HttpContext.Items.Remove("Token"); //context.HttpContext.Items["Token"] = token; } catch (Exception e) { LogHelper.WriteLog(e); mes.code = "303"; mes.message = e.Message; context.Result = new JsonResult(mes); } } } }