1.0 创建Attribute

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace LSUnion.Site.WebHelper
{
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple=false)]
public class CheckAdminLoginAttribute:Attribute
{
}
}

2.0 创建 CheckAdminLoginActionFilterAttribute

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LSUnion.Site.Common; namespace LSUnion.Site.WebHelper
{
public class CheckAdminLoginActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
Type checkAdminAtt = typeof(CheckAdminLoginAttribute);
//判断action或者action所在的controller是否贴有此标签
var isCheckAdminLogin = filterContext.ActionDescriptor.IsDefined(checkAdminAtt, false) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(checkAdminAtt, false);
if (isCheckAdminLogin)//如果贴有标签,检查登录
{
//先判断session
if (HttpContext.Current.Session[Keys.adminUserInfo] == null)
{
//session为空,再判断cookie是否做了免登陆
var ck = filterContext.HttpContext.Request.Cookies[Keys.isRememberAdmin];//里面可以存加密的用户Id
if (ck!=null)
{
HttpContext.Current.Session[Keys.adminUserInfo] = ck.Value;
}
else
{
ToLogin(filterContext);
} }
} } private void ToLogin(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var jsonRes = new JsonResult();
jsonRes.Data = new {status = (int) Enums.EAjaxStatus.nologin, msg = "您未登录或者登录已失效!"};
filterContext.Result = jsonRes;
}
else
{
ActionResult res = new RedirectResult("/Admin/Login/index");
filterContext.Result = res;
}
}
}
}

3.0 在 App_Start里面的FilterConfig.cs中配置

using System.Web;
using System.Web.Mvc;
using LSUnion.Site.WebHelper; namespace LSUnion.Site
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new CheckAdminLoginActionFilterAttribute());//增加自己定义的过滤器
}
}
}

4.0 给需要做登录检查的方法或者控制器加上 [CheckAdminLogin]

mvc通过ActionFilterAttribute做登录检查的更多相关文章

  1. MVC前台页面做登录验证

    最近接触了一个电商平台的前台页面,需要做一个登录验证,具体情况是:当用户想要看自己的订单.积分等等信息,就需要用户登录之后才能查询,那么在MVC项目中我们应该怎么做这个前台的验证呢? 1.我在Cont ...

  2. springMVC 拦截器如何做登录检查及页面跳转

    一个非常简单的登录权限拦截器 问题一:登录页面的提交请求肯定是要过滤掉的,目前采用在xml里配置<mvc:mapping path="/supplier/*"/>来过滤 ...

  3. MVC扩展Filter,通过继承ActionFilterAttribute为登录密码加密

    与ActionFilter相关的接口有2个: □ IActionFilter 对action执行前后处理 void OnActionExecuting(ActionExecutingContext f ...

  4. MVC中ActionFilterAttribute用法并实现统一授权

    MVC中ActionFilterAttribute经常用来处理权限或者统一操作时的问题. 先写一个简单的例子,如下: 比如现在有一个用户管理中心,而这个用户管理中心需要登录授权后才能进去操作或浏览信息 ...

  5. MVC 检测用户是否登录

         当我们访问一个网站的需求检測用户是否已经登录(通过Session是否为null),我们知道在WebForm中能够定义一个BasePage类让他继承System.Web.UI.Page,重写它 ...

  6. MVC过滤器实现用户登录验证

    前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...

  7. MVC下判断用户登录和授权状态方法

    MVC下判断用户登录和授权状态方法 在我们日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization ...

  8. 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  9. angular利用ui-router登录检查

    angular利用ui-router登录检查 SAP都会有这个问题,session过期或者页面被刷新的情况下应该进入登录页. 监听ui-router的satte事件可以实现当state切换的时候检查登 ...

随机推荐

  1. JavaScript开发原生App模式能否突出重围?

    移动应用制作的第三方服务市场已经被瓜分得差不多了,对于刚起步的中小企业来说,这些公司的 IT 部门人员比较熟悉的是 Appcan ,但随着互联网公司对 App 开发的需求持续升温,也有不少后来的闯入者 ...

  2. TW2015技术雷达中文版发布

    今天thoughtworks 2015新版技术雷达pdf发布了,你可以从这里下载http://engage.thoughtworks.com/HQ0000Q0QOf5pE70nbD00GP,在这里你可 ...

  3. hadoop学习笔记:zookeeper学习(上)

    在前面的文章里我多次提到zookeeper对于分布式系统开发的重要性,因此对zookeeper的学习是非常必要的.本篇博文主要是讲解zookeeper的安装和zookeeper的一些基本的应用,同时我 ...

  4. JavaScript思维导图—流程控制

    JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/

  5. 《OOC》笔记(0)——为何要看这本书

    <OOC>笔记(0)——为何要看这本书 <OOC>全名是<Object-oriented Programming with ANSI-C>,作者Axel-Tobia ...

  6. Redmined的历史记录显示 "Updated by {{author}} {{age}} ago"

    最近Redmine出了点问题,简单查了一下,是ruby的本地冲突包i18n导致的, 先到redmine中跑命令: gem list --local,  查出本地ruby安装的所有的包 这里可以看到i1 ...

  7. Atitit 颜色平均值cloor grb hsv模式的区别对比

    Atitit 颜色平均值cloor grb hsv模式的区别对比 使用hsv模式平均后会变得更加的靓丽一些..2 public class imgT { public static void main ...

  8. SQL SERVER 2005/2008 中关于架构的理解(二)

    本文上接SQL SERVER 2005/2008 中关于架构的理解(一)      架构的作用与示例 用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决SQL SERVE ...

  9. javascript_basic_04之节点、元素

    1.DOM:文档对象模型,Document Object Model: 2.BOM:浏览器对象模型,Browser Object Model: 3.DOM组成:核心DOM,XML DOM,HTML D ...

  10. 大型.NET商业软件代码保护技术 技术与实践相结合保护辛苦创造的劳动成果

    列举工作以来遇到的各种类型的软件所采用的代码保护技术,只讲原理不涉及技术细节实现,以避免产生法律问题.有些朋友说直接把代码放在Github开源下载,开源可以促进技术交流与进步,然而值钱的代码都积压在硬 ...