我AOP的設計理念在軟體開發中的應用越來越廣泛,這不是一個高大上的東西,而是每個程式員都應該熟知的一個東西。因為它友善的就是我們程式員。使用AOP,我們可以專注于邏輯代碼的編寫,将那些系統功能統一交給AOP架構去管理,在運作時自動耦合起來。
當我們通路URL頁面時,比如A可以浏覽所有頁面。B隻可以浏覽一部分頁面,如果沒有一個統一的權限控制,隻要URL位址正确,大家都可以通路。這樣就沒權限控制可言了。是以在通路頁面中之前,我們先去自動執行我寫的權限判斷。
具體知道我要幹什麼了,那麼怎麼實作呢?
我自定義了一個filter——AuthAttribute。
1、假如我要執行如下這個Controller下的Action。這個Controller和Action都是大家自己編寫的,這裡隻是個執行個體。
namespace
ITOO.BasicPlaceClient.Controllers
{
//控制器類,繼承了Controllers
public class MyController : Controller
public ActionResult Index()
return View();
}
複制代碼
2、在執行之前,先進行權限判斷,執行我寫的這個自定義的filter。在這裡,我們會取出你簡要通路的Controller和Action,在緩存了取出你所擁有的通路權限。在這裡判斷你是否有通路該Controller裡的Action的權限。沒有權限,直接給出友好提示,你沒有權限。嘿嘿,還算是友好吧。但是你要是擁有權限,他會繼續執行你要通路的Action,将你想要見到的頁面呈現給您。
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Web.Mvc;
ITOO.Library.Core.Memcache;
System.Collections;
ITOO.BasicPlaceClient.Controllers.Attribute
///
///
ActionFilterAttribute是Action過濾類,該屬于會在執行一個action之前先執行.而ActionFilterAttribute是
MVC的一個專門處理action過濾的類.基于這個原理做的一個權限限制。
public class AuthAttribute : ActionFilterAttribute
/// 在執行操作方法之前由 ASP.NET MVC 架構調用
public override void
OnActionExecuting(ActionExecutingContext filterContext)
////擷取 controllerName
名稱
var controllerName =
filterContext.RouteData.Values["Controller"].ToString();
///擷取你将要執行的Action的域名
var actionName =
HttpContext.Current.Request.RequestContext.RouteData.Values["Action"].ToString();
Guid selfGuid1 =
Guid.NewGuid();//申請了一個模拟的GUID
Guid selfGuid2 =
MemcacheHelper.Add(selfGuid1.ToString(), "QueryBed",
DateTime.Now.AddMinutes(20));
//Controller存入緩存
MemcacheHelper.Add(selfGuid2.ToString(), "Index",
//Action存入緩存
//建立一個List集合
List guids1 = new
List();
//将緩存裡取出的key值存放到List裡
guids1.Add(selfGuid1.ToString());
guids1.Add(selfGuid2.ToString());
//建立資料字典getkey對象
IDictionary getkey = new
Dictionary();
//擷取一組緩存
getkey =
MemcacheHelper.Get(guids1);
//驗證權限,先驗證Controller
foreach (KeyValuePair kvp in
getkey)
//如果有将要通路的Controller的權限
if
(kvp.Value.ToString() == controllerName)
//如果有将要通路的Acting的權限
foreach (KeyValuePair kvp1 in getkey)
if (kvp1.Value.ToString() == actionName)
//全部通過,則存在通路将要通路的Controller下的Action
return;
//沒有權限,驗證不通過
ContentResult Content = new
ContentResult();
Content.Content = "
//執行結果為權限不通過
filterContext.Result =
Content;
這是權限判斷的代碼。在使用它之前,我們要在Global裡面的RegisterGlobalFilters進行注冊。否則在方法執行之前是不會執行這段代碼的。
3、注冊:
filters.Add(new
AuthAttribute());
這樣,就實作了一個簡單的權限控制。技術淺薄,就寫成這樣了,有什麼不對的大家互相交流。
更多java學習 web架構學習 http://techfoxbbs.com