ASP.NET 使用web.config配置文件的system.webServer/modules标签实现登录验证

前言

  • modules 标签允许你添加、删除或配置在 IIS 中运行的 HTTP 模块。HTTP 模块是处理 HTTP 请求和响应的组件,它们可以在请求处理管道的不同阶段执行代码。
  • 某些 system.webServer 中的设置可能只适用于 IIS 的特定模式(如集成模式),而不适用于其他模式(如经典模式)
  • 当你需要扩展 IIS 的功能或自定义 HTTP 请求/响应处理流程时,可以使用 modules 标签来添加自定义的 HTTP 模块
  • 请注意,修改 IIS 配置可能会影响到网站或应用程序的行为和安全性
  • 使用场景:多个应用系统,使用同一个登录模块

1、Web.config配置文件

注意:以下内容为部分配置,不是整个web.config的配置

<?xml version="1.0" encoding="utf-8"?>
<configuration><configSections><!--指定配置文件读取类--><section name="MyLoginCheck" type="Login.Client.ConfigReader,Login.Client"/></configSections><MyLoginCheck><!--配置项--><add key="setting1" value="value11" /><add key="setting2" value="value22" /></MyLoginCheck><system.webServer><modules><!--配置http请求预处理模块--><add name="LoginClientHttpModule" type="Login.Client.LoginCheck,Login.Client" /></modules></system.webServer>
</configuration>

2、配置读取类

using System.Collections.Generic;
using System.Configuration;
using System.Xml;namespace Login.Client
{public class ConfigReader : IConfigurationSectionHandler{public object Create(object parent, object configContext, XmlNode section){var settings = new Dictionary<string, string>();foreach (XmlNode child in section.ChildNodes){//<add key="" value=""/>属于XmlNodeType.Elementif (child.NodeType == XmlNodeType.Element){var key = child.Attributes["key"]?.Value;var value = child.Attributes["value"]?.Value;if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value)){settings.Add(key, value);}}}return settings; // 返回解析后的配置数据}private static object locker = new object();private static Dictionary<string, string> _loginSetting;/// <summary>/// 配置键值对/// </summary>public static Dictionary<string, string> LoginSetting{get{if (_loginSetting == null){lock (locker){if (_loginSetting == null){_loginSetting = (Dictionary<string, string>)ConfigurationManager.GetSection("MyLoginCheck");}}}return _loginSetting;}}}
}

3、登录校验类

using Newtonsoft.Json;
using System;
using System.Web;
using System.Xml;namespace Login.Client
{public class LoginCheck : IHttpModule{public void Dispose(){}public void Init(HttpApplication context){// 使用AcquireRequestState:当ASP.NET获取与当前的请求相关联的当前状态(例如会话状态)context.AcquireRequestState += new EventHandler(Check);}private void Check(Object source, EventArgs e){HttpApplication application = (HttpApplication)source;HttpContext context = application.Context;//context.Session 获取会话// 尝试从集合中获取设置值if (ConfigReader.LoginSetting == null){return;}string setting1 = ConfigReader.LoginSetting["setting1"]?.ToString();string setting2 = ConfigReader.LoginSetting["setting2"].ToString();if (isLogin()){// 用户未登录,重定向到登录页面context.Response.Redirect(setting1, true);}}private bool isLogin(){//这里替换为判断是否登录逻辑return false;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git拉取、切换分支等操作

当你在本地计算机上通过 git clone 命令克隆了一个 Git 仓库后&#xff0c;你会得到一个与远程仓库相对应的本地副本。这个本地副本包含了远程仓库的所有历史记录、分支、标签等。接下来&#xff0c;我会详细解释在该目录下启动 Terminal 并使用 Git 命令来查看和切换分支&…

【FPGA】Verilog 中的 genvar 和 generate 语句教程

在 Verilog 中&#xff0c;generate 语句用于生成多个结构化的代码块&#xff0c;这些代码块可以是循环&#xff08;使用 for&#xff09;或条件生成&#xff08;使用 if&#xff09;。genvar 是一个在 generate 块中使用的变量&#xff0c;用于迭代生成实例。 什么是 genvar&…

一站式企业服务平台能够帮助企业解决哪些问题?

近年来一站式企业服务平台备受区域政府及园区管理者的青睐&#xff0c;充当着区域政府或园区的千里眼和顺风耳&#xff0c;可以用来捕捉与区域经济发展相关的信息&#xff0c;也可以用来倾听企业的诉求&#xff0c;更是成为了区域深抓企业服务的多面手。 同时&#xff0c;一站式…

高电压技术-冲击高压发生器MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 冲击电压发生器是产生冲击电压波的装置&#xff0c;用于检验电力设备耐受大气过电压和操作过电压的绝缘性能&#xff0c;冲击电压发生器能产生标准雷电冲击电压波形&#xff0c;雷电冲击电压截波,标准操作冲击…

SHELL脚本学习(十三)初识 gawk 编辑器

概述 gawk提供了一种编程语言&#xff0c;而不仅仅是编辑器命令。 在gawk语言中&#xff0c;可以实现如下操作&#xff1a; 定义变量保存数据使用算数和字符串运算符处理数据使用结构化编程概念 为数据处理添加处理逻辑提取文件中的数据并将其重新排列组合&#xff0c;最后生…

注解详解系列 - @Bean:定义Spring管理的Bean

注解简介 在今天的注解详解系列中&#xff0c;我们将探讨Bean注解。Bean是Spring提供的一个注解&#xff0c;用于在Java配置类中显式定义一个Spring管理的Bean。通过Bean注解&#xff0c;可以灵活地定义和配置Bean&#xff0c;从而增强应用程序的可维护性和可测试性。 注解定义…

python_时间戳对齐

需求 python 有2个保存时间戳的list&#xff0c; listA 和 listB, 对于listA中的每一个时间戳元素cur_ts&#xff0c; 查找listB中 与cur_ts最接近的前后两个时间戳元素 代码 import bisect# 示例数据 listA [1, 5, 10, 15] listB [2, 6, 8, 12, 14, 18]def find_closest_…

容器化spring boot应用程序

容器化spring boot应用程序有多种方式&#xff0c;如基于简单的Dockerfile&#xff0c;多阶段Dockerfile以及基于Docker Compose等&#xff0c;我们将逐步给大家介绍&#xff0c;本节主要介绍基于简单的Dockerfile进行容器化spring boot的应用程序。 创建Spring boot应用程序 …

SOLID:软件系统设计的五个基本原则

SOLID 是面向对象设计和编程中的五个基本原则的首字母缩写&#xff0c;旨在鼓励更加灵活和可维护的软件设计。SOLID 原则可以帮助我们更好地理解和实施某些设计模式。 SOLID 原则包括以下五个方面&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle, SRP&…

Java零基础-集合:Collections

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

未来科技中的RTK接收机应用探索

RTK实时差分定位技术&#xff08;RTK&#xff0c;Real-Time Kinematic&#xff09;&#xff0c;作为高精度定位技术的一种重要手段&#xff0c;已经在地理测绘、测量工程、航空航天等领域取得了广泛应用。随着科技的不断发展&#xff0c;RTK导航接收机的应用领域也日益拓宽。首…

AI大模型日报#0628:谷歌开源9B 27B版Gemma2、AI首次实时生成视频、讯飞星火4.0发布

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff01;《AI大模型日报》今日要点&#xf…

【高考】选专业时以什么为主?

【高考】选专业时&#xff0c;应避免的误区-CSDN博客 【高考】选专业时以什么为主&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专业还是选好学校&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专业还是选好学校&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专…

合并排序的数组

题目链接 合并排序的数组 题目描述 注意点 A的末端有足够的缓冲空间容纳BA和B都是排序的 解答思路 最初想到的是双指针&#xff0c;从小到大找到合并B时应该A相应位置应该插入的元素&#xff0c;因为在插入的过程中B的元素会替换A原有位置的元素&#xff0c;所以需要先将A…

营销翻车,杜国楹出面道歉,小罐茶的“大师作”故事仓皇结尾

“小罐茶&#xff0c;大师作”&#xff0c;这句slogan曾一度在央视平台长时间、高密度播放&#xff0c;成为家喻户晓的广告词&#xff0c;也打响了小罐茶品牌的名号。但同时&#xff0c;市场上关于“大师作”真实性的质疑也从未停息。 就在6月25日小罐茶十二周年发布会上&#…

大数据面试题之HBase(2)

目录 列式数据库的适用场景和优势?列式存储的特点? HBase的rowkey设计原则 HBase的rowkey为什么不能超过一定的长度?为什么要唯一?rowkey太长会影响Hfile的存储是吧? HBase的RowKey设置讲究有什么原因 HBase的大合并、小合并是什么? HBase和关系型数据库(传统数…

Jenkins容器的部署

本文主要是记录如何在Centos7上安装docker,以及在docker里面配置tomcat、mysql、jenkins等环境。 一、安装docker 1.1 准备工作 centos7、VMware17Pro 1.2 通过yum在线安装dokcer yum -y install docker1.3 启动docker服务 systemctl start docker.service1.4 查看docke…

JavaSE期末复习速成笔记

面向对象 1. 面向对象的概念 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它将现实世界的事物抽象为对象&#xff0c;通过类和对象来创建各种功能模块&#xff0c;以此来设计和开发软件。 2. 类与对象 类&#xff1a;是对象的模板&#xff0c;定义了…

自动化巡检革命:旗晟双圆管轨道机器人的创新应用

在输煤皮带线和矿山带式输送机的巡检过程中&#xff0c;面临着高湿度、多粉尘、温湿度极端、噪音干扰&#xff1b;设备磨损频繁&#xff0c;难以及时发现问题&#xff1b;传统的人工巡检方式存在劳动强度大、效率低、检测质量不稳定、数据采集和分析滞后&#xff0c;无法实现实…

oracle 11g rac创建实例时发现只给一节点创建了实例 二节点没创建的处理方法

由于操作失误没有在二节点创建实例 删除数据库重新dbca建库 [oracleracdg1-1 dbs]$ dbca -silent -deleteDatabase -sourceDB rac11dg1 -sysDBAUserName sys -sysDBAPassword oracle_4U Connecting to database 4% complete 9% complete 14% complete 19% complete 23% …