我AOP的設計理念在軟件開發中的應用愈來愈普遍,這不是一個高大上的東西,而是每一個程序員都應該熟知的一個東西。由於它方便的就是咱們程序員。使用AOP,咱們能夠專一於邏輯代碼的編寫,將那些系統功能統一交給AOP框架去管理,在運行時自動耦合起來。
當咱們訪問URL頁面時,好比A能夠瀏覽全部頁面。B只能夠瀏覽一部分頁面,若是沒有一個統一的權限控制,只要URL地址正確,你們均可以訪問。這樣就沒權限控制可言了。因此在訪問頁面中以前,咱們先去自動執行我寫的權限判斷。
具體知道我要幹什麼了,那麼怎麼實現呢?
我自定義了一個filter——AuthAttribute。
一、假如我要執行以下這個Controller下的Action。這個Controller和Action都是你們本身編寫的,這裏只是個實例。
php
namespace ITOO.BasicPlaceClient.Controllers java
{ 程序員
//控制器類,繼承了Controllers web
public class MyController : Controller 緩存
{ 框架
public ActionResult Index() ide
{ 學習
return View(); ui
} spa
}
}
複製代碼
二、在執行以前,先進行權限判斷,執行我寫的這個自定義的filter。在這裏,咱們會取出你簡要訪問的Controller和Action,在緩存了取出你所擁有的訪問權限。在這裏判斷你是否有訪問該Controller裏的Action的權限。沒有權限,直接給出友好提示,你沒有權限。嘿嘿,還算是友好吧。可是你要是擁有權限,他會繼續執行你要訪問的Action,將你想要見到的頁面呈現給您。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ITOO.Library.Core.Memcache;
using System.Collections;
namespace 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 = Guid.NewGuid();//申請了一個模擬的GUID
MemcacheHelper.Add(selfGuid1.ToString(), "QueryBed", DateTime.Now.AddMinutes(20));
//Controller存入緩存
MemcacheHelper.Add(selfGuid2.ToString(), "Index", DateTime.Now.AddMinutes(20));
//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進行註冊。不然在方法執行以前是不會執行這段代碼的。
三、註冊:
filters.Add(new AuthAttribute());
複製代碼
這樣,就實現了一個簡單的權限控制。技術淺薄,就寫成這樣了,有什麼不對的你們互相交流。
更多java學習 web框架學習 http://techfoxbbs.com