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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

使用IHttpHandler做权限控制[ASP.NET | IHttpHandler | AjaxPro | UserHostName]

發(fā)布時(shí)間:2025/3/8 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用IHttpHandler做权限控制[ASP.NET | IHttpHandler | AjaxPro | UserHostName] 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正文

?????Web.Config配置如下:

<add?verb="POST,GET"?path="/page/*.aspx,/page/*/*.aspx,/page/*/*/*.aspx,/page/*/*/*/*.aspx,/page/*/*/*/*/*.aspx"?type="WebLibrary.PowerManage.HttpHanderPowerControls"/>

?????整個(gè)IHttpHandler實(shí)現(xiàn)代碼如下:

????///?<summary>
????
///?本HttpHanderPowerControls可以控制權(quán)限,但是在使用AjaxPro的時(shí)候AjaxPro.Utility.RegisterTypeForAjax需要指定第二個(gè)參數(shù),否則會(huì)報(bào)錯(cuò)
????
///?????如:AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default),Page);
????
///?</summary>
????public?class?HttpHanderPowerControls?:?IHttpHandler,?IRequiresSessionState
????{

????????
///?<summary>
????????
///??獲取一個(gè)值,該值指示其他請(qǐng)求是否可以使用?System.Web.IHttpHandler?實(shí)例。
????????
///?</summary>
????????public?bool?IsReusable
????????{
????????????
get?{?return?true;?}
????????}

????????
public?void?ProcessRequest(HttpContext?context)
????????{
????????????HttpSessionState?session?
=?context.Session;
????????????
//權(quán)限判斷
????????????if?(session["uname"]?!=?null?&&?!string.IsNullOrEmpty(session["uname"].ToString()))
????????????{
????????????????
//Type?type?=?BuildManager.GetCompiledType(path);
????????????????
//ASP.NET?1.1使用以下語句獲得IHttpHandler
????????????????
//context.Server.Transfer(PageParser.GetCompiledPageInstance(path,?context.Request.PhysicalPath,?context),true);
????????????????
//AjaxPro.Utility.RegisterTypeForAjax(type,?handler?as?Page);
????????????????context.Server.Transfer(BuildManager.CreateInstanceFromVirtualPath(context.Request.Path,?typeof(Page))?as?IHttpHandler,?true);
????????????}
????????????
else
????????????{
????????????????context.Server.Transfer(
"/login.aspx");
????????????}
????????}
????}

?

?????代碼說明:

???????????????1.?????這里我只截獲.aspx的文件請(qǐng)求訪問,所以CreateInstanceFromVirtualPath第二個(gè)參數(shù)指定成typeof(Page)就行了,當(dāng)然也可以用BuildManager.GetCompiledType(path)獲得它的Type,調(diào)試的時(shí)候我發(fā)現(xiàn)這行代碼比較費(fèi)時(shí)間,而且也不需要就直接用了Page了

???????????????2.?????BuildManager.CreateInstanceFromVirtualPath 方法?MSDN說法:處理給定了虛擬路徑的文件,并創(chuàng)建結(jié)果的實(shí)例。 ?????[分享]在自定義的HttpHandler中調(diào)用.net默認(rèn)HttpHandler的方法?提供的是我注釋掉的部分,是ASP.NET?1.1使用,當(dāng)然2.0下也能使用!

?????流程說明:

???????????????用戶訪問根目錄下/page目錄下的aspx頁面,將被HttpHanderPowerControls截獲,在ProcessRequest里進(jìn)行權(quán)限判斷,如果有權(quán)限的話繼續(xù)執(zhí)行頁面(手動(dòng)創(chuàng)建編譯指定的頁面的實(shí)例);如果沒有權(quán)限,跳轉(zhuǎn)到login頁面。

?

注意問題:

?????1.?????在使用AjaxPro的時(shí)候AjaxPro.Utility.RegisterTypeForAjax需要指定第二個(gè)參數(shù),例如:AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default),Page);

?????????????指定為Page就行了,否則會(huì)報(bào)錯(cuò)顯示類型轉(zhuǎn)換失敗!

?????2.?????path的匹配問題,他不能匹配子目錄內(nèi)的文件,支持簡單的*、?通配符,例如:/page/*? -> 就只能匹配page目錄下的文件 /page/*/* -> 能匹配page目錄下任意一級(jí)子目錄下的文件。

?????3.?????在使用驗(yàn)證碼的時(shí)候注意了,如果也是用Page頁返回并且在權(quán)限控制范圍內(nèi)的話注意要過濾掉!

?

遺留問題:

?????1.?????這樣做到底會(huì)不會(huì)造成性能上的損害?!

?????2.?????對(duì)于屬性IsResult仍然持不理解狀態(tài)!

?

結(jié)束

?????歡迎大家交換意見,繼續(xù)探索權(quán)限控制方面在ASP.NET中的解決方案:)



本文轉(zhuǎn)自over140 51CTO博客,原文鏈接:http://blog.51cto.com/over140/586473,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的使用IHttpHandler做权限控制[ASP.NET | IHttpHandler | AjaxPro | UserHostName]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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