日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

MVC4项目中验证用户登录一个特性就搞定

發(fā)布時間:2024/9/20 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVC4项目中验证用户登录一个特性就搞定 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在開發(fā)過程中,需要用戶登陸才能訪問指定的頁面這種功能,微軟已經(jīng)提供了這個特性。// 摘要:// 表示一個特性,該特性用于限制調(diào)用方對操作方法的訪問。[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter但是,美中不足的是,需要微軟自帶的一些用戶驗(yàn)證的東西,比如數(shù)據(jù)庫,配置等等的。常常我們只需要用SESSION或者Cookies去保存用戶登錄狀態(tài)的時候,這豈不是殺雞用牛刀的感覺?那么,我們按照微軟官方的這個特性,重寫一個屬于自己的驗(yàn)證特性類就行了。下面是我常用的自己寫的一段代碼,希望大家用得開心,如果有異議可以自己修改,代碼無版權(quán),哈哈,我們只為共享。下面也提供了一個可以直接引用的DLL,需要.NET 4.0 Framework的支持。下載地址:點(diǎn)擊這里下載代碼: using System.Web.Mvc;namespace System {/// <summary>/// 表示需要用戶登錄才可以使用的特性/// <para>如果不需要處理用戶登錄,則請指定AllowAnonymousAttribute屬性</para>/// </summary>[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]public class AuthorizationAttribute : FilterAttribute, IAuthorizationFilter{/// <summary>/// 默認(rèn)構(gòu)造函數(shù)/// </summary>public AuthorizationAttribute(){String authUrl = System.Configuration.ConfigurationManager.AppSettings["AuthUrl"];String saveKey = System.Configuration.ConfigurationManager.AppSettings["AuthSaveKey"];String saveType = System.Configuration.ConfigurationManager.AppSettings["AuthSaveType"];if (String.IsNullOrEmpty(authUrl)){this._AuthUrl = "/User/Login";}else{this._AuthUrl = authUrl;}if (String.IsNullOrEmpty(saveKey)){this._AuthSaveKey = "LoginedUser";}else{this._AuthSaveKey = saveKey;}if (String.IsNullOrEmpty(saveType)){this._AuthSaveType = "Session";}else{this._AuthSaveType = saveType;}}/// <summary>/// 構(gòu)造函數(shù)重載/// </summary>/// <param name="loginUrl">表示沒有登錄跳轉(zhuǎn)的登錄地址</param>public AuthorizationAttribute(String authUrl): this(){this._AuthUrl = authUrl;}/// <summary>/// 構(gòu)造函數(shù)重載/// </summary>/// <param name="loginUrl">表示沒有登錄跳轉(zhuǎn)的登錄地址</param>/// <param name="saveKey">表示登錄用來保存登陸信息的鍵名</param>public AuthorizationAttribute(String authUrl, String saveKey): this(authUrl){this._AuthSaveKey = saveKey;this._AuthSaveType = "Session";}/// <summary>/// 構(gòu)造函數(shù)重載/// </summary>/// <param name="authUrl">表示沒有登錄跳轉(zhuǎn)的登錄地址</param>/// <param name="saveKey">表示登錄用來保存登陸信息的鍵名</param>/// <param name="saveType">表示登錄用來保存登陸信息的方式</param>public AuthorizationAttribute(String authUrl, String saveKey, String saveType): this(authUrl, saveKey){this._AuthSaveType = saveType;}private String _AuthUrl = String.Empty;/// <summary>/// 獲取或者設(shè)置一個值,改值表示登錄地址/// <para>如果web.config中未定義AuthUrl的值,則默認(rèn)為/User/Login</para>/// </summary>public String AuthUrl{get { return _AuthUrl.Trim(); }set{if (String.IsNullOrEmpty(value)){throw new ArgumentNullException("用于驗(yàn)證用戶登錄信息的登錄地址不能為空!");}else{_AuthUrl = value.Trim();}}}private String _AuthSaveKey = String.Empty;/// <summary>/// 獲取或者設(shè)置一個值,改值表示登錄用來保存登陸信息的鍵名/// <para>如果web.config中未定義AuthSaveKey的值,則默認(rèn)為LoginedUser</para>/// </summary>public String AuthSaveKey{get { return _AuthSaveKey.Trim(); }set{if (String.IsNullOrEmpty(value)){throw new ArgumentNullException("用于保存登陸信息的鍵名不能為空!");}else{this._AuthSaveKey = value.Trim();}}}private String _AuthSaveType = String.Empty;/// <summary>/// 獲取或者設(shè)置一個值,該值表示用來保存登陸信息的方式/// <para>如果web.config中未定義AuthSaveType的值,則默認(rèn)為Session保存</para>/// </summary>public String AuthSaveType{get { return _AuthSaveType.Trim().ToUpper(); }set{if (String.IsNullOrEmpty(value)){throw new ArgumentNullException("用于保存登陸信息的方式不能為空,只能為【Cookie】或者【Session】!");}else{_AuthSaveType = value.Trim();}}}/// <summary>/// 處理用戶登錄/// </summary>/// <param name="filterContext"></param>public void OnAuthorization(AuthorizationContext filterContext){if (filterContext.HttpContext == null){throw new Exception("此特性只適合于Web應(yīng)用程序使用!");}else{switch (AuthSaveType){case "SESSION":if (filterContext.HttpContext.Session == null){throw new Exception("服務(wù)器Session不可用!");}else if (!filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) && !filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)){if (filterContext.HttpContext.Session[_AuthSaveKey] == null){filterContext.Result = new RedirectResult(_AuthUrl);}}break;case "COOKIE":if (!filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) && !filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)){if (filterContext.HttpContext.Request.Cookies[_AuthSaveKey] == null){filterContext.Result = new RedirectResult(_AuthUrl);}}break;default:throw new ArgumentNullException("用于保存登陸信息的方式不能為空,只能為【Cookie】或者【Session】!");}}}} }然后在Web.Config文件里面加入下面幾句用于配置登陸驗(yàn)證的一些信息:<appSettings><add key="AuthUrl" value="/User/Login" /><add key="AuthSaveKey" value="LoginedUser" /><add key="AuthSaveType" value="Session" /></appSettings>使用實(shí)例: //...省略引用 namespace MrHuo.Framework.Blog {[Authorization]//如果將此特性加在Controller上,那么訪問這個Controller里面的方法都需要驗(yàn)證用戶登錄狀態(tài)public class UserController:Controller{[AllowAnonymous]//這里是一個特例,有這個特性,表示這個方法不需要驗(yàn)證用戶登錄狀態(tài)public ActionResult Index(){//...省略具體代碼}//這里的方法需要驗(yàn)證登錄狀態(tài),以下雷同public ActionResult Create(){//...省略具體代碼}} } 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的MVC4项目中验证用户登录一个特性就搞定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。