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

正文

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

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

?????整個IHttpHandler實現代碼如下:

????///?<summary>
????
///?本HttpHanderPowerControls可以控制權限,但是在使用AjaxPro的時候AjaxPro.Utility.RegisterTypeForAjax需要指定第二個參數,否則會報錯
????
///?????如:AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default),Page);
????
///?</summary>
????public?class?HttpHanderPowerControls?:?IHttpHandler,?IRequiresSessionState
????{

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

????????
public?void?ProcessRequest(HttpContext?context)
????????{
????????????HttpSessionState?session?
=?context.Session;
????????????
//權限判斷
????????????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的文件請求訪問,所以CreateInstanceFromVirtualPath第二個參數指定成typeof(Page)就行了,當然也可以用BuildManager.GetCompiledType(path)獲得它的Type,調試的時候我發現這行代碼比較費時間,而且也不需要就直接用了Page了

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

?????流程說明:

???????????????用戶訪問根目錄下/page目錄下的aspx頁面,將被HttpHanderPowerControls截獲,在ProcessRequest里進行權限判斷,如果有權限的話繼續執行頁面(手動創建編譯指定的頁面的實例);如果沒有權限,跳轉到login頁面。

?

注意問題:

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

?????????????指定為Page就行了,否則會報錯顯示類型轉換失敗!

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

?????3.?????在使用驗證碼的時候注意了,如果也是用Page頁返回并且在權限控制范圍內的話注意要過濾掉!

?

遺留問題:

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

?????2.?????對于屬性IsResult仍然持不理解狀態!

?

結束

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



本文轉自over140 51CTO博客,原文鏈接:http://blog.51cto.com/over140/586473,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540212.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540212.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540212.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] Java 中字符串轉整型和整型轉字符串

參考鏈接&#xff1a; Java中的字符串到整數– parseInt() Java 中字符串轉整型和整型轉字符串 1.字符串轉整型Java代碼&#xff0c;字符串為純數字的情況下&#xff0c;調用Integer的靜態方法parseInt或者valueOfJava代碼&#xff0c;如果單個字符或字符串&#xff0c;需要切…

Gram matrix 格拉姆矩陣

2019獨角獸企業重金招聘Python工程師標準>>> Gram matrix 度量各個維度自己的特性以及各個維度之間的關系。 來自&#xff1a;https://www.zhihu.com/question/49805962?fromprofile_question_card 由感知機&#xff08;對偶感知機中需要計算樣本點兩兩之間的內積和…

[轉載] 用Java語言實現對十六進制字符串異或運算

參考鏈接&#xff1a; 交換兩個字符串&#xff0c;而無需在Java中使用第三個用戶定義的變量 前言&#xff1a;好久沒有寫博客&#xff0c;最近一年感覺真是好忙&#xff0c;各種做不完的工作。相信很多上班族都會有這種感覺。最近對NFC進行寫卡操作&#xff0c;需要計算一個校…

MySQL日常應用操作記錄

1.知道一個字段名&#xff0c;怎樣查到它在數據庫里的哪張表里&#xff1f; USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME字段名稱; MySQL中查看庫表字段信息都在information_schemal中&#xff0c;獲取數據字典等信息都要通過這個視圖。 如&…

[轉載] 【Java】將一個字符串的字符排序,按ASCII表的順序從小到大

參考鏈接&#xff1a; 在Java中搜索字符串中的字符和子字符串 將一個字符串的字符按ASCII表的順序從小到大排序&#xff0c;如將字符串“asdafxcvMADb”排序為“ADMaabcdfsvx” 算法的基本思想&#xff1a; 先將字符串轉化為一個char類型的數組&#xff0c;來進行存儲&#xf…

如果只做前端驗證的話,談jjdd.com的看照片功能。

如果你在上海&#xff0c;并且坐過地鐵的話&#xff0c;你肯定知道jjdd.com。 這個網站和百合&#xff0c;世紀佳緣類似&#xff0c;都是交朋友的性質。 在jjdd.com中有個很重要的功能&#xff1a;如果你上傳的照片比你想看的人少的話&#xff0c;你是不能看她的照片的。 例如如…

[轉載] 快速學習-Mybatis框架概述

參考鏈接&#xff1a; Java在競爭性編程中的快速I/O 第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架&#xff08;Framework&#xff09;是整個或部分系統的可重用設計&#xff0c;表現為一組抽象構件及構件實例間交互的方法;另一種定義認為&#xff0c;框架是可被…

3、MySQL的數據類型介紹

上一章節內容主要介紹了一些MySQL中對表和庫的增刪改查操作&#xff0c;對于上一章中對與表中字段的一些定義進行說明&#xff0c;本章主要介紹關于數據庫類型的一些定義。一、概述&#xff1a;MySQL數據庫中的數據大致可以分為以下幾類&#xff0c;從而實現數據庫在操作的時候…

[轉載] 必須要會回答的Java面試題(字符串篇)

參考鏈接&#xff1a; 比較Java中的兩個字符串String 最近很多學習java的小白問我字串相關的問題&#xff0c;覺得很有必要整理下&#xff0c;以方便初學者理解字符串以及應對今后面試中考官的提問。 如果你是有幾年Java開發經驗&#xff0c;可以根據目錄選擇性的閱讀以下內…

[轉載] java如何實現一個字符串的反轉和替換

參考鏈接&#xff1a; 反轉Java中的字符串String 一、java字符串的反轉 1.利用java字符串的拼接實現字符串的反轉&#xff0c;代碼如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

java 中的instanceof

java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出&#xff0c;這個對象是否是這個特定類或者是它的子類的一個實例。 用法&#xff1a;result object instanceof class參數&#xff1a;Result&#xff1a;布爾類…

[轉載] 將一個整數型字符串轉換為一個整數

參考鏈接&#xff1a; Java中整數到字符串轉換的不同方法 package com.utl.string; /* * 將一組整數字符串轉換為整數 * 例&#xff1a;"234"轉換為整數型234 * 分析&#xff1a;涉及到許多問題&#xff0c;例如非法輸入&#xff0c;有正負號&#xff0c;是否為空字…

升級PowerShell至4.0版本

為了更好的使用Cmder v1.2&#xff0c;不得不升級PowerShell為4.0。 不知道Cmder的&#xff0c;可以點擊這里&#xff1a;https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是運行在Windows機器上實現系統和應用程序管理自動化的命令行腳本環境。 需要.NET環境…

[轉載] 字符串太長 pep8_Python f字符串– PEP 498 –文字字符串插值

參考鏈接&#xff1a; 從Java中的字符串中刪除前導零 字符串太長 pep8 Python f-strings or formatted strings are the new way to format strings. This feature was introduced in Python 3.6 under PEP-498. It’s also called literal string interpolation. Python f字符…

備忘(持續更新。。。)

1、在springmvc這個框架里面&#xff0c;創建新的業務邏輯層&#xff0c;dao、service層至少需要一個接口&#xff0c;項目才能跑起來 2、獲取當前用戶桌面路徑 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

[轉載] 字符串操作截取后面的字符串_對字符串的5個必知的熊貓操作

參考鏈接&#xff1a; 修剪Java中的字符串(刪除前導和尾隨空格) 字符串操作截取后面的字符串 We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually co…

更改域控制器的計算機名

林功能級別必須為Windows Server 2003及以上 1. netdom computername Server08-1.contoso.com /add:08Server1.contoso.com 2. netdom computername Server08-1.contoso.com /makeprimary:08Server1.contoso.com 3. Restart your computer 4. netdom computername 08Server1.co…

[轉載] Google Java代碼規范

參考鏈接&#xff1a; 使用Java計算文本文件txt中的行數/單詞數/字符數和段落數 原文地址&#xff1a;https://google.github.io/styleguide/javaguide.html GIthub上GoogleCode風格的配置文件&#xff08;支持Eclipse IDE和IntelliJ IDE&#xff09;&#xff1a;https://git…

SQL PASS西雅圖之行——簽證篇

本人有幸通過IT168&itpub的站慶活動http://www.itpub.net/thread-1716961-1-1.html&#xff0c;并應微軟邀請參加了在西雅圖舉辦的The Conference for SQL Server Professionals&#xff08;簡稱SQL-PASS&#xff09;。 SQL-PASS會議計劃于2012年11月6日-9日舉行&#xff0…

[轉載] java8 lambda表達式 List轉為Map

參考鏈接&#xff1a; 使用Lambda表達式檢查字符串在Java中是否僅包含字母 public static void main(String[] args) { List<User> userList new ArrayList<User>(); User user0 new User("han1", "男1", 20); User user1 new User("…