系列目錄
1、Taurus.MVC WebAPI 入門開發教程1:框架下載環境配置與運行。
2、Taurus.MVC WebAPI 入門開發教程2:添加控制器輸出Hello World。
3、Taurus.MVC WebAPI 入門開發教程3:路由類型和路由映射。
4、Taurus.MVC WebAPI 入門開發教程4:控制器方法及參數定義、獲取及基礎校驗屬性【Require】。
5、Taurus.MVC WebAPI 入門開發教程5:控制器安全校驗屬性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。
6、Taurus.MVC WebAPI 入門開發教程6:全局控制器DefaultController與全局事件。
7、Taurus.MVC WebAPI 入門開發教程7:業務邏輯基類LogicBase的使用。
8、Taurus.MVC WebAPI 入門開發教程8:WebAPI文檔與自動化測試。
後續還有兩個系列:
1、Taurus.MVC 微服務 入門開發教程系列。 2、Taurus.MVC Web應用 入門開發教程系列。
前言:
本系列還有幾篇,抓緊時間寫完,本篇介紹控制器各安全校驗屬性的使用。
1、Http請求方式屬性:【HttpGet】【HttpPost】【HttpHead】【HttpPut】【HttpDelete】
作用:
可限制該方法允許的請求類型,允許標識多個。
如果方法沒有標記,即默認允許所有請求類型。
對於控制器的方法,只需要標識上對應的屬性標籤,示例使用:
public class MSController : Controller { /// <summary> /// Get or Post 測試 /// </summary> /// <param name="msg">post 消息</param> /// <param name="file" type="file">file</param> [HttpGet] [HttpPost] public void Hello(string msg, System.Web.HttpPostedFile file) { //MicroService.Const.HeaderKey if (file != null) { file.SaveAs(file.FileName); } if (Request.UrlReferrer != null) { Write("From : " + Request.UrlReferrer.ToString() + "\r\n"); } Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName); } }
說明:
僅允許Get或Post兩種請求方式。
2、安全控制屬性:【Ack】
作用:
1、實現自定義:控制請求頻率。 2、實現自定義:黑名單過濾。 3、實現自定義:過濾無效的攻擊請求。
該標識通常要求發起請求者在請求頭傳遞ack=xxx值,以便API獲取該值並進行分析判斷。
示例使用:
public class MSController : Controller { public override bool CheckAck() { string ack = Query<string>("ack"); //1、IP黑名單判斷。 //2、重複請求判斷:檢測該標識是否請求過了。 //3、IP請求頻繁檢測:判斷是否攻擊請求。 return 判斷後的結果,false禁止繼續執行,true則繼續; } /// <summary> /// Get or Post 測試 /// </summary> /// <param name="msg">post 消息</param> /// <param name="file" type="file">file</param> [HttpGet] [HttpPost] [Ack] public void Hello(string msg, System.Web.HttpPostedFile file) { //MicroService.Const.HeaderKey if (file != null) { file.SaveAs(file.FileName); } if (Request.UrlReferrer != null) { Write("From : " + Request.UrlReferrer.ToString() + "\r\n"); } Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName); } }
該標識可以標識在方法,或者類屬性上,對於標識上Ack的方法,會觸發CheckAck方法。
作用區域:
1、局部控制器內生效:重載CheckAck方法即可。 2、全局生效:在全局控制器DefaultController中的全局事件CheckAck方法實現。
對於安全的處理代碼,框架沒有提供,有需要可自己實現。
3、賬號授權屬性:【Token】
作用:
作爲賬號登陸後,傳遞賬號信息用於校驗與獲取信息使用。
該標識通常要求發起請求者在請求頭傳遞token=xxx值,以便API獲取該值並進行分析判斷。
示例:
public class MSController : Controller { public override bool CheckToken() { string token = Query<string>("token"); //進行安全驗證 return base.CheckToken(); } /// <summary> /// Get or Post 測試 /// </summary> /// <param name="msg">post 消息</param> /// <param name="file" type="file">file</param> [HttpGet] [HttpPost] [Token] public void Hello(string msg, System.Web.HttpPostedFile file) { //MicroService.Const.HeaderKey if (file != null) { file.SaveAs(file.FileName); } if (Request.UrlReferrer != null) { Write("From : " + Request.UrlReferrer.ToString() + "\r\n"); } Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName); } }
用法和Ack一樣,僅是作用不同。
作用區域:
1、局部控制器內生效:重載CheckToken方法即可。 2、全局生效:在全局控制器DefaultController中的全局事件CheckToken方法實現。
框架內部有提供實現,但是不建議使用,如有需要可以參考源碼使用。
參考源碼在:https://github.com/cyq1162/Taurus.MVC/blob/master/Taurus.Core/Extend/AuthController.cs
4、微服務通訊安全屬性:【MicroService】
作用:
用於校驗微服務間的調用權限驗證,避免直接請求。
使用方式和【Ack】【Token】一樣,也有對應的方法:
public class MSController : Controller { public override bool CheckMicroService() { string key = Query<string>(MicroService.Const.HeaderKey); //進行安全驗證 return ... } /// <summary> /// Get or Post 測試 /// </summary> /// <param name="msg">post 消息</param> /// <param name="file" type="file">file</param> [HttpGet] [HttpPost] [MicroService] public void Hello(string msg, System.Web.HttpPostedFile file) { //MicroService.Const.HeaderKey if (file != null) { file.SaveAs(file.FileName); } if (Request.UrlReferrer != null) { Write("From : " + Request.UrlReferrer.ToString() + "\r\n"); } Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName); } }
作用區域:
1、局部控制器內生效:重載CheckMicroService方法即可。 2、全局生效:在全局控制器DefaultController中的全局事件CheckMicroService方法實現。
該屬性的使用,在Taurus.MVC 微服務框架系列的安全篇中,會另外提到。
總結:
本篇介紹各屬性在控制器中的基本使用,各屬性都可以在各控制器類或方法中使用。
對於需要全局統一管控處理的,在全局控制中處理,可以見下一篇都得,全局的DefaultController。