EnterpriseLibrary2.0HandsOnLab翻譯(8):異常應用程式塊(二)
練習2:異常處理策略
通過本練習將學會使用異常處理應用程式塊的包裝策略,來處理一些帶有敏感資訊的異常。
第一步
開啟Puzzler2.sln 專案,預設的安裝路徑應該為C:Program FilesMicrosoft Enterprise Library January 2006labscsException Handlingexercisesex02,並編譯。
第二步 保護服務中`Add Word`函式的程式碼訪問安全
1.在解決方案管理器選擇專案PuzzlerService中的Dictionary.cs檔案,選擇View | Code選單命令,為方法Add Word加上程式碼訪問安全特性。
// TODO: Add security attribute
[PrincipalPermission(SecurityAction.Demand, Role = “Grand PoohBah“)]
public static Boolean AddWord(string wordToAdd)
{
if (!IsWord(wordToAdd))
{
// It is not alphabetic! Throw an exception
throw new ApplicationException(
“Word to add does not consist of alphabetic letters“);
}
if (Dict[wordToAdd] == null)
{
Dict.Add(wordToAdd, wordToAdd);
}
return true;
}
[PrincipalPermission(SecurityAction.Demand, Role = “Grand PoohBah“)]
public static Boolean AddWord(string wordToAdd)
{
if (!IsWord(wordToAdd))
{
// It is not alphabetic! Throw an exception
throw new ApplicationException(
“Word to add does not consist of alphabetic letters“);
}
if (Dict[wordToAdd] == null)
{
Dict.Add(wordToAdd, wordToAdd);
}
return true;
}
現在該方法只可以被角色Grand PoohBah所執行。注意要修改的方法在Dictionary.cs中而不是DictionaryService.cs。
2.選擇Debug | Start Without Debugging選單命令執行應用程式。在Word to check文字框中輸入數字並單擊Add Word按鈕。這將會引發服務的AddWord方法丟擲一個SecurityException異常資訊,在事件檢視器中可以看到。
這裡SecurityException資訊從服務端傳到了客戶端,其中包含的資訊將會有助於攻擊者來攻破我們的系統安全。所以應該是在服務端記錄異常資訊,而只傳送很少的資訊到客戶端。
3.關閉應用程式。
第三步 配置應用程式包裝SecurityExceptions
1.在解決方案管理器中選中App.config檔案,在View選單或者在右鍵選單中選擇Open With…,將開啟OpenWith對話方塊,選中Enterprise Library Configuration並單擊OK按鈕。
App.config已經包含了一個空的策略Service Policy,預設的,如果一個策略是空的,異常資訊將會從Catch塊中重新丟擲,事實上該策略並沒有做任何事情。
2.選中Service Policy節點,選擇Action | New | Exception Type選單命令。在彈出的對話方塊中選擇System.Security.SecurityException,並單擊OK按鈕。
3.選中Service Policy | SecurityException節點,並設定如下屬性。
PostHandlingAction = ThrowNewException
4.新增新的Logging Handler,選中Service Policy | SecurityException節點,並選擇Action | New | Logging Handler選單命令,設定如下屬性。
FormatterType = TextExceptionFormatter,
LogCategory = General
Title = Security Exception in Service Layer
5.新增新的Replace Handler,選中Service Policy | SecurityException節點,選擇Action | New | Replace Handler選單命令,並設定如下屬性。
ExceptionMessage = Unauthorized Access
ReplaceExceptionType = System.Security.SecurityException (from mscorlib)
第四步 發生安全異常時退出應用程式
1.選中UI Policy節點,選擇Action | New | Exception Type選單命令,選擇System.Security.SecurityException型別並單擊OK按鈕,設定如下屬性。
PostHandlingAction = NotifyRethrow
處理行為NotifyRethrow將引發Application.ThreadException重新丟擲異常,重新丟擲的異常將會為一個未處理異常unhandled exception。
2.為SecurityException在UI Policy策略下面新增新的Logging Handler,選擇Action | New | Logging Handler選單命令,設定如下屬性。
FormatterType = TextExceptionFormatter,
LogCategory = General
Title = Security Exception in UI Layer
3.儲存應用程式配置並關閉Enterprise Library Configuration工具。
第五步 測試包裝處理
選擇Debug | Start Without Debugging執行應用程式,在Word to check文字框中輸入數字並單擊Add Word按鈕。如果單擊Continue將會出現“Unhandled exception”異常資訊,這時不會再出現安全異常資訊,可以開啟事件檢視器檢視相關的日誌記錄情況。
在這裡事件日誌將會記錄三次異常,第一次是由服務層引發的Service Policy所記錄的異常,這是記錄在服務端的;第二次是Application ThreadException引發的UI Policy所記錄的異常,它是記錄在客戶端,由於這裡服務端和客戶端使用的是同一個機器;第三次是AppDomain UnhandledException引發的Unhandled Policy記錄的異常。
注意根據Hands On Lab給出的時間建議,做完以上兩個練習的時間應該為30分鐘。
更多Enterprise Library的文章請參考《Enterprise Library系列文章》
本文轉自lihuijun51CTO部落格,原文連結:http://blog.51cto.com/terrylee/67639 ,如需轉載請自行聯絡原作者
相關文章
- [翻譯]-異常處理最佳實踐
- 翻譯 | Java流中如何處理異常Java
- DirectShow應用程式設計介紹(翻譯) (轉)程式設計
- 解決devenv.exe應用程式錯誤,應用程式發生異常dev
- [Flutter翻譯]釋出您的Flutter桌面應用程式Flutter
- Java 異常(二) 自定義異常Java
- 安卓應用安全指南翻譯完成安卓
- 翻譯 | 《JavaScript Everywhere》第22章 移動應用程式shellJavaScript
- python應用:異常處理Python
- 異常-編譯期異常和執行期異常的區別編譯
- 蘋果應用商店稽核指南(中文翻譯)蘋果
- OpenCV翻譯專案總結二——Mat翻譯OpenCV
- 譯:原生iOS應用程式和原生Android應用程式設計之間的差異iOSAndroid程式設計
- 翻譯 | 《JavaScript Everywhere》第18章 帶Electron的桌面應用程式JavaScript
- [譯] 響應式 Web 應用(二)Web
- [禁止chrome頁面翻譯程式碼塊]chrome外掛Chrome
- 序列異常導致災備端應用異常處理一則
- java程式佔用cpu異常升高Java
- 自定義UDF函式應用異常函式
- Java應用異常狀態監測Java
- K8S下應用異常卡頓問題的分析與學習K8S
- 【翻譯】基於 Cypress 測試 React 應用React
- 使用Webpack提升Vue.js應用程式的4種方法(翻譯)WebVue.js
- [翻譯]ASP.NET 2.0網站應用程式的效能優化ASP.NET網站優化
- 8 Java NIO FileChannel-翻譯Java
- [轉][翻譯]深入理解Win32結構化異常處理(三)Win32
- [轉][翻譯]深入理解Win32結構化異常處理(一)Win32
- win10開啟應用程式出現應用程式發生異常unknown software如何解決Win10
- [Flutter翻譯]我希望在構建Flutter應用程式之前知道的事情Flutter
- [翻譯] 響應式程式設計(Reactive Programming) - 流(Streams) - BLoC - 實際應用案例程式設計ReactBloC
- 8.空指標異常指標
- Java異常捕捉陷阱(記憶體洩漏,finally塊,catch塊,繼承得到的異常)Java記憶體繼承
- 文件翻譯器怎麼用?如何翻譯Word文件?
- 爬取必應翻譯
- 原創翻譯-Java 8新特性Java
- 程式設計=翻譯?程式設計
- Util應用框架基礎(五) - 異常處理框架
- Java學習--異常處理及其應用類Java