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();
|
|
/// <summary>
|
/// 在Action执行前执行
|
/// </summary>
|
/// <param name="context"></param>
|
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<User>(us.rediskey, 0) !=null)
|
{
|
//获取redis中当前用户信息
|
User r_loginUser = redis.Get<User>(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);
|
}
|
}
|
}
|
}
|