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
- MySQL儲存過程的許可權問題MySql儲存過程
- APP許可權相關的東西APP
- 關於公司程式碼許可權的問題
- GoFrame 框架使用 casbin 許可權認證GoFrame框架
- DRF-認證許可權頻率
- 上傳APP到Google Play許可權問題APPGo
- MySQL許可權問題MySql
- 許可權的級聯問題
- Django框架之drf:7、認證元件,許可權元件,頻率元件,過濾的多種用法,排序,分頁,Django框架元件排序
- autohotkey透過com物件控制excel的許可權問題物件Excel
- Centos sudo 許可權問題CentOS
- 兩個關於許可權設定的問題思考
- jenkins 容器內的許可權問題Jenkins
- sqlserver 賦予許可權的問題SQLServer
- Ocelot閘道器+IdentityServer4實現API許可權認證IDEServerAPI
- Windows 反除錯技術——OpenProcess 許可權過濾Windows除錯
- 深入Django:使用者認證與許可權控制實戰指南Django
- 記一次 Laravel日誌許可權許可權問題(定時器導致)Laravel定時器
- 【Linux】淺析檔案屬性與許可權相關命令Linux
- 分割槽使用與Oracle許可證問題XSOracle
- DRF比Django的認證和許可權高在哪裡Django
- 動態許可權相關的幾個庫分析
- Ubuntu 下 Composer 許可權問題Ubuntu
- Laravel 框架的日誌許可權問題Laravel框架
- Grafana9的dashboard許可權問題Grafana
- Hyperf 完整專案-1-jwt 許可權認證JWT
- iOS相關許可權檢測和申請iOS
- 關於css權值的問題CSS
- 許可權維持專題:域控制器許可權維持
- Django REST framework中認證和許可權的使用方法DjangoRESTFramework
- 認證授權問題概覽
- RUST所有權相關問題Rust
- Mysql資料庫許可權問題MySql資料庫
- hdfs檔案本地許可權問題