第一步,自定义 AuthorizeAttribute。

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (null == filterContext)
throw new Exception(“filterContext is null”);
var user = filterContext.HttpContext.Session[ConstStr.SessionUserName]; #if DEBUG
return;
#endif // 用户为空,赋予Guest
if (null == user||string.Empty==user.ToString())
{ //未登录
filterContext.HttpContext.Response.Write(Com.ConstStr.DWZTimeOut);
filterContext.HttpContext.Response.End();
return;
}
//权限验证代码 //略…..
}
}

小技巧:如果你想在调试模式下跳过登录验证可以加上下面这段代码,当你以Debug编译,启动调试时就会执行”return”。这是预处理命令。

#if DEBUG             return; #endif

  • 第二步,新建 BaseController继承Controller

[CustomAuthorize]
public class BaseController: Controller
{
}

注意加粗的这个CustomAuthorize 这就是我们前面自定义的CustomAuthorizeAttribute ,在类前面加上这个属性后,其它需要进行权限控制的Controller都继承这个BaseController

默认继承后的Controller 的Action都需要验证后才能访问。

  • 第三部,处理无需验证的特例Action

可能有人会问,我有的Action和Controller 不需要登录验证怎么做特殊处理?

Controller好办,不继承BaseController,继承Controller就好了。

Action 如果不需要验证,需要做两步处理:第一,所在的Controller不继承BaseController。第二给每个Action分别设置权限验证的设定。如下面的用户的Controller

public class UserController : Controller
{
public ActionResult Login() //login 不需要登录验证,所以没加CustomAuthorize
{
return View(“~/Views/Account/user/login.cshtml”);
}
//
// GET: /User/
[CustomAuthorize]
public ActionResult Index()
{ return View();
} //
// GET: /User/Details/5
[CustomAuthorize]
public ActionResult Details(int id)
{
return View();
} //
// GET: /User/Create
[CustomAuthorize]
public ActionResult Create()
{
return View(“~/Views/Account/user/create.cshtml”);
} }

方法2.

public class CustomAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("HttpContext");
}
if (!httpContext.User.Identity.IsAuthenticated)
{
return false;
} string userName = httpContext.User.Identity.Name
///根据用户名从数据库中获取用户,实现自定义验证。 return false;
} public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
/// base.OnAuthorization(filterContext);
}
}

C#_MVC3之使用Authorize简单的验证登录(一)的更多相关文章

  1. ASP.Net Core 2.1+ Cookie 登录授权验证【简单Cookie验证】

    介绍 本文章发布于博客园:https://www.cnblogs.com/fallstar/p/11310749.html 作者:fallstar 本文章适用于:ASP.NET Core 2.1 + ...

  2. asp.net mvc4 过滤器的简单应用:登录验证

    直接上代码,不要说话. ASP.NET MVC4过滤器的简单应用:验证登录 [AcceptVerbs(HttpVerbs.Post)] public ActionResult login(FormCo ...

  3. WebService 简单安全验证

    原文:WebService 简单安全验证 最近新接了一个需要调用第三方WebService的项目,看到这个第三方WebService被调用的时候,需要授权用户名和密码,于是自己也想对WebServic ...

  4. 比特币区块结构Merkle树及简单支付验证分析

    在比特币网络中,不是每个节点都有能力储存完整的区块链数据,受限于存储空间的的限制,很多节点是以SPV(Simplified Payment Verification简单支付验证)钱包接入比特币网络,通 ...

  5. 01_11_Strtus2简单数据验证

    01_11_Strtus2简单数据验证 1. 引入struts标签 <%@taglib uri="/struts-tags" prefix="s" %&g ...

  6. 用javascript实现简单的用户登录验证

    用javascript实现简单的用户登录验证 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  7. jsp+servlet+mysql 实现简单的银行登录转账功能

    jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...

  8. java实现简单的单点登录

    java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...

  9. 一步一步实现FormsAuthentic验证登录

    本文不讲原理,只讲用法,原理性的东西网上特别多,不过还是会对一些要用到的东西进行解释,不深入讲原理.本文中用的是Vs2012   .net mvc 4.0.原理看这篇文章,看完这个文章绝对受益匪浅. ...

随机推荐

  1. apache开源项目-- OODT

    Apache OODT (Object Oriented Data Technology) OODT 面向对象的数据技术,开发和促进科学数据管理和归档制度,使跨学科和天体物理学之间的互操作性,行星和空 ...

  2. ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访问

    环境: 192.168.2.10 192.168.2.11 实现:2.10 ssh无需密码登录到2.11 在2.10 ssh到2.11机器上,需要密码,这样对一些脚本工作不方便,因为需要密码,也就是需 ...

  3. oracle导入到Excel

    一.从oracle到处数据到excel文件方法一.直接从PL/SQL中,全选数据,然后复制粘贴到excel中: 方法二.同样是通过PL/SQL,在数据列中,点击右键-->导出结果-->选择 ...

  4. process thread Fiber(linux)

    http://blog.chinaunix.net/uid-21084809-id-2215376.html Processes, kernel threads, user threads, and ...

  5. tomcat 容器中的UML架构图

  6. 如何使用Paste.Deploy

    转自:http://bingotree.cn/?p=100 1.Paste Deploy的一个组件,但是并不依赖于Paste的其它组件.其可以看成是一个独立的包.其主要用于通过一个配置文件完成WSGI ...

  7. U盘安装CentOS 6.5注意事项

          这两天新到一批机器,需要安装系统.买的机器没有光驱,只能使用U盘或者网络安装.为了方便,我使用UltraISO对U盘进行刻录制作了启动盘.一切都是那么顺利,安装完成了,没出现什么问题(毕竟 ...

  8. Node.js中的ORM

    ORM2是一款基于Node.js实现的ORM框架,名字相当的霸气,算是同类框架中非常出色的一款,具体介绍请猛击:https://github.com/dresende/node-orm2 刚接触Nod ...

  9. Crash的旅行计划

    除草了.. Crash的旅行计划 [问题描述] 过不了多久,Crash就要迎来他朝思暮想的暑假.在这个暑假里,他计划着到火星上旅游.在火星上有N个旅游景点,Crash用1至N这N个正整数对这些景点标号 ...

  10. maven 名词

    maven 坐标: 坐标 其实就是 通过几种不同的元素描述来找到其对应的构件. maven 定义坐标的元素有: 1. groupId : 定义当前maven 项目隶属的实际项目,一般是域名的反向写法 ...