国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

學習一下.net framework 中有關(guān)安全的內(nèi)容

2019-11-18 17:17:54
字體:
供稿:網(wǎng)友

  好容易在繁重的開發(fā)任務(wù)之余抽出點時間學習一些東西。發(fā)現(xiàn)機子里有幾個關(guān)于 System.Security 內(nèi)容的示例,這一個命名空間以前還真是從來沒用過,正好拿來學習一下。由于不是系統(tǒng)的學習,不好組織,想了想,就以示例來說明吧。 

  一、設(shè)定權(quán)限

1[FileIOPermission(SecurityAction.Demand, Write= "C://temp.txt")]
2public class App : System.Windows.Forms.Form
3{
4    //略
5}
  FileIOPermissionAttribute 定義于 System.Security.Permissions 里。它繼承于 SecurityAttribute,在這個例子中,要求使用 App 類時必須具有對 C:/temp.txt 文件的寫權(quán)限。

  .net framework 的文檔中關(guān)于安全要求有這樣一段話:“若要確保只有被授予了指定權(quán)限的調(diào)用方才能夠調(diào)用您的代碼,可以聲明方式或強制方式要求您的代碼的調(diào)用方擁有特定的權(quán)限或權(quán)限集。要求使運行庫執(zhí)行安全檢查,從而對調(diào)用代碼實施限制。在安全檢查過程中,運行庫遍歷調(diào)用堆棧,檢查堆棧中每個調(diào)用方的權(quán)限,然后確定是否已將要求的權(quán)限授予每個調(diào)用方。如果發(fā)現(xiàn)某個調(diào)用方?jīng)]有要求的權(quán)限,則安全檢查失敗,并引發(fā) SecurityException?!?/P>

  例子中,權(quán)限是以聲明的方式出現(xiàn)的。SecurityAction.Demand 可以作用于類或方法,在這里是作用于類上。Write 是 FileIOPermission 的屬性之一,其它常用屬性還有 Read、Append、All 等等。

  SecurityAction 枚舉中還有一些值是作用于 assembly 上的。比如以下的例子:

[assembly:SecurityPermission(SecurityAction.RequestMinimum ,UnmanagedCode=true)]
  SecurityAction.RequestMinimum 是請求運行的最小權(quán)限。這一行要求程序集允許調(diào)用非托管代碼。

  除了聲明方式外,還可以使用強制方式。如下的代碼:

 1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionaccess.AllAccess, "C://temp.txt");
 2try
 3{
 4    filePerm.Demand();
 5   
 6    // Code to access file goes here
 7}
 8catch (SecurityException excep)
 9{
10    MessageBox.Show (excep.Message);
11    return;
12}
13
  二、用戶角色管理

  用戶及其角色的管理是在許多程序中都要使用到的。如今 asp.net 2.0 對于這方面有了大大增強,開發(fā)人員不需要很了解技術(shù)就可以做出很不錯的應(yīng)用。不過對于 Windows Form 應(yīng)用程序來說,不少地方還需要程序員自己設(shè)定。

  假定我們已知曉了 userName 以及它所屬于的 roles,那么可以這樣來設(shè)置當前線程的 PRincipal:

1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = new GenericPrincipal(genIdent, roles);
3Thread.CurrentPrincipal = genPrin;
4
  隨后我們有三種辦法來進行用戶角色驗證。

  第一種方法是使用 GenericPrincipal.IsInRole 方法:

1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("Manager"))
4{
5    //略
6}
7
  第二種方法則是使用 PrincipalPermission 類,類似于權(quán)限設(shè)定中的強制方式:

 1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
 2
 3try
 4{
 5    prinPerm.Demand();
 6
 7    //do something
 8}
 9catch
10{
11    //error handling
12}
  第三種方式則類似于權(quán)限設(shè)定中的聲明方式:

 1private void DecPermButton_Click(object sender, System.EventArgs e)
 2{
 3    try
 4    {
 5        performManagerAction();
 6        // do something
 7    }
 8    catch
 9    {
10        // error handling
11    }
12}
13
14[PrincipalPermission(SecurityAction.Demand, Role="Manager")]
15void performManagerAction()
16{
17}
  關(guān)于安全的另一個重要內(nèi)容是加密。今天沒空寫了,改天再說。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新邵县| 凤凰县| 蓬莱市| 卓尼县| 枞阳县| 儋州市| 尼勒克县| 乌拉特后旗| 巫山县| 彰化县| 开鲁县| 青神县| 万荣县| 旺苍县| 报价| 泗洪县| 桐梓县| 朝阳县| 通州市| 江西省| 建湖县| 将乐县| 金山区| 闵行区| 靖安县| 长泰县| 长治市| 洪洞县| 霍山县| 阜城县| 巴林左旗| 洛川县| 荣成市| 邢台县| 柳州市| 双鸭山市| 米泉市| 沁源县| 甘泉县| 昭平县| 松滋市|