2020.10.22-MVC5過濾器(許可權認證)與checkbox傳值的相關問題
一、checkbox傳值:通過Name屬性值獲取 使用者選中的項資料,會序列化成陣列形式傳遞
後臺程式碼:
二、MVC5的許可權驗證AuthorizeAttribute
using Microsoft.Ajax.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Helpers;
using System.Web.Management;
using System.Web.Mvc;
namespace RM_MVC._2020._10._21.Models
{
/// <summary>
/// 指定空明知其或Action的訪問只限於滿足授權的使用者
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class UserInfoAuthorizationAttribute : AuthorizeAttribute
{
public string loginUri { get; set; }
//不同專案的登入Action 可能不一樣
public UserInfoAuthorizationAttribute(string loginUrl = "~/UserInfo/Index")
{
this.loginUri = loginUrl;
}
/// <summary>
/// 認證校驗
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(AuthorizationContext filterContext)
{
//判斷是否跳過授權過濾器
if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))
{
return;
}
else
{
if (filterContext.HttpContext.Session["CurrentUseInfo"] == null || !(filterContext.HttpContext.Session["CurrentUseInfo"] is Userinfo))
{
//如果是Ajax請求 返回Json資料
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
//filterContext.Result = new ContentResult() { Content = "NO-請登入" };
//返回son字串
filterContext.Result = new JsonResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { msg = "請登入", code = 0 } };
}
//記住使用者請求的URL,登陸成功以後自動跳轉至該頁面
filterContext.HttpContext.Session["FirstUrl"] = filterContext.HttpContext.Request.Url.AbsoluteUri;
//如果不是Ajax,就直接獲取或設定由Action返回的結果(跳轉頁面)
filterContext.Result = new RedirectResult(this.loginUri);
}
else
{
//已有登入 略過不處理(日誌。。)
return;
}
}
//base.OnAuthorization(filterContext);
}
}
}
使用方式:class action 全域性:
1.登入(Login)控制器或者Action不需要認證、使用AllowAnonymous特性忽略認證
2.只打上特性標籤還遠遠不夠、需要在你許可權認證的時候,加判斷。
3.這樣使用者在請求登入頁面的時候不會造成死迴圈(無限重定向)、
三、Error自定義全域性過濾器:
使用方式:class action 全域性:
△:自定義異常處理程式能捕獲哪些異常資訊?
1.Action異常、沒被捕獲
2.Action呼叫Servicec服務異常(異常throw傳遞)
3.Action正常、View檢視異常
4.許可權驗證時異常(Authorization)
△:自定義異常處理程式不能捕獲到哪些異常資訊?
1.控制器建構函式異常不能被捕獲。(控制器被構造後,才有Filter)
2.訪問Action時名稱出錯 (與Route相關、與MVC處理程式無關)
△:怎麼解決這些漏網之魚?實現可以全面捕獲異常的組合?
註冊Global檔案裡的Application_Error() 事件–全域性異常處理事件函式
四、Action過濾器:
擴充套件:Action過濾器也可以使用Controller基類實現
五、過濾器(執行順序)以及改變方式
如果一個Action同時應用了 Action過濾、Class過濾、全域性過濾
預設由外到內–>由內到外 這個執行順序
改變順序---->使用Order屬性 值越大 優先觸發過濾事件
[ActionFilterAttribute(order = 15 )]
[ControllerFilterAttribute(order = 50 )]
[OverallFilterAttribute(order = 5 )]
六、Action(執行順序)異常捕獲 圖片
相關文章
- 認證/授權與許可權的問題
- 淺析Spring Security 的認證過程及相關過濾器Spring過濾器
- Hadoop 許可權認證Hadoop
- pg許可權相關
- spring security許可權認證Spring
- 儲存過程,角色相關的呼叫者許可權和定義者許可權問題儲存過程
- APP許可權相關的東西APP
- GoFrame 框架使用 casbin 許可權認證GoFrame框架
- MySQL儲存過程的許可權問題MySql儲存過程
- JAAS中的認證與授權問題
- 關於公司程式碼許可權的問題
- 關於oracle檔案許可權的問題Oracle
- Oracle許可權相關查詢Oracle
- oracle許可權相關檢視Oracle
- 上傳APP到Google Play許可權問題APPGo
- MySQL許可權問題MySql
- 關於檢視和儲存過程的許可權問題探究儲存過程
- Oracle許可權(二)許可權相關的動態效能檢視與資料字典檢視Oracle
- ORACLE中儲存過程的許可權問題Oracle儲存過程
- 關於jdon裡許可權系統的問題
- DB2 public許可權相關DB2
- Django框架之drf:7、認證元件,許可權元件,頻率元件,過濾的多種用法,排序,分頁,Django框架元件排序
- moderator permission的許可權問題
- Shiro筆記--shiroFilter許可權過濾筆記Filter
- Oracle sqlnet.ora相關認證問題OracleSQL
- android 許可權問題Android
- SQL Server許可權問題SQLServer
- 【過濾器】web中過濾器的使用與亂碼問題解決過濾器Web
- 關於ORACLE作業系統認證和ORAPWD密碼檔案認證SYSDBA許可權Oracle作業系統密碼
- 兩個關於許可權設定的問題思考
- 深入Django:使用者認證與許可權控制實戰指南Django
- 系統、角色、物件相關許可權字典物件
- 系統許可權相關資料字典
- DRF比Django的認證和許可權高在哪裡Django
- Windows 反除錯技術——OpenProcess 許可權過濾Windows除錯
- sqlserver 賦予許可權的問題SQLServer
- 記一次 Laravel日誌許可權許可權問題(定時器導致)Laravel定時器
- 儲存過程與許可權儲存過程