Aop检查Session,全局过滤器和No全局过滤器
全局过滤器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace UpdateService.Filter { public class AccessControl : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { bool flag = false ; List<FilterAttribute> list = filterContext.ActionDescriptor.GetFilterAttributes( false ).ToList(); list.AddRange(filterContext.ActionDescriptor.ControllerDescriptor.GetFilterAttributes( false ).ToList()); foreach ( var item in list) { bool b = item.Match( new AccessControlNoFilter()); if (b == true ) { flag = true ; break ; } } if (flag == true ) { base .OnActionExecuting(filterContext); } else { HttpContextBase context = filterContext.HttpContext; HttpResponseBase response = filterContext.HttpContext.Response; HttpRequestBase request = filterContext.HttpContext.Request; if (context.Session[ "User" ] == null ) { if (request.IsAjaxRequest()) { HttpUnauthorizedResult httpStatus = new HttpUnauthorizedResult( "Session Timeout" ); filterContext.Result = httpStatus; //禁用web.config中的form认证 //<!--<authentication mode="Forms"> //<forms loginUrl="~/Account/Login" timeout="2880" /> //</authentication>--> } else { ContentResult con = new ContentResult(); con.Content = "<script>alert('当前会话已超时!');location='/Home/Login';</script>" ; filterContext.Result = con; } } base .OnActionExecuting(filterContext); } } } } |
NO全局过滤器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace UpdateService.Filter { public class AccessControlNoFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { base .OnActionExecuting(filterContext); } } } |
FilterConfig.cs
1 2 3 4 5 6 7 8 | public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //全局Session检查 filters.Add( new AccessControl()); } } |
Jquery:
$(function () { // 设置jQuery Ajax全局的参数 $.ajaxSetup({ complete: function (jqXHR, textStatus, errorThrown) { if (jqXHR.statusText == "Session Timeout") { alert('当前会话已超时!'); location = "/Home/Login"; } } }); });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人