.net core mvc用户身份验证

主要实现Cookie过期后自动跳转登录页

public class UserAuthorization : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var description = (Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor;
            var Controllername = description.ControllerName.ToLower();
            var Actionname = description.ActionName.ToLower();

            //var RequestMethod = context.HttpContext.Request.Method;
            //var ResponseStatusCode = context.HttpContext.Response.StatusCode;
            //var RequestQurey = context.HttpContext.Request.QueryString.ToString();
            //var RequestContextType = context.HttpContext.Request.ContentType;
            //var RequestHost = context.HttpContext.Request.Host.ToString();
            //var RequestPath = context.HttpContext.Request.Path;
            //var RequestScheme = context.HttpContext.Request.Scheme;
            //var RequestLocalIp = (context.HttpContext.Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + context.HttpContext.Request.HttpContext.Connection.LocalPort);
            //var RequestRemoteIp = (context.HttpContext.Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() + ":" + context.HttpContext.Request.HttpContext.Connection.RemotePort);

            //执行方法前先执行这
            if (context.HttpContext.Request.Cookies["UserInfo.id"] == null)
            {
                //base.OnActionExecuting(context);  //调用父类的该方法。
                //获取是小写
                if (Controllername == "home" && (Actionname == "login" || Actionname == "loginpost"))
                {
                    //base.OnActionExecuting(context);
                }
                else
                {
                    if (context.HttpContext.Request.Headers.ContainsKey("x-requested-with"))
                    {
                        if (context.HttpContext.Request.Headers["x-requested-with"] == "XMLHttpRequest")
                        {
                            context.Result = new ContentResult() { Content = "{\"code\": 499,\"msg\": \"Cookie过期,请重新登录\",\"count\": 0,\"data\": null}", StatusCode = 200, ContentType= "application/json;" };
                        }
                    }
                    else
                    {
                        context.Result = new RedirectResult("/Home/Login");  //Redirect("/Home/Login");
                    }
                }
            }
        }
    }

登录页和退出页不验证。

判断是否异步,如果是返回对应的信息

if (context.HttpContext.Request.Headers.ContainsKey("x-requested-with"))
                    {
                        if (context.HttpContext.Request.Headers["x-requested-with"] == "XMLHttpRequest")
                        {
                            context.Result = new ContentResult() { Content = "{\"code\": 499,\"msg\": \"Cookie过期,请重新登录\",\"count\": 0,\"data\": null}", StatusCode = 200, ContentType= "application/json;" };
                        }
                    }

异步我都是自己定义的状态编码和消息,所以直接状态返回的200,然后ContentType= "application/json;"返回的内容为json,就是自己的编码格式,作为异步判定跳转。

new ContentResult() { Content = "{\"code\": 499,\"msg\": \"Cookie过期,请重新登录\",\"count\": 0,\"data\": null}", StatusCode = 200, ContentType= "application/json;" };

非异步就直接跳转 new RedirectResult("/Home/Login");

另外说下,如果是框架中,有iframe的情况,会跳转到iframe中,那么需要在登录页加上下面的js

<script language="JavaScript">
        if (window != top)
            top.location.href = location.href;
    </script>

那么就会自动跳转一下。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值