HttpModule 示例

ROST_CM6软件之词频分析、社会网络和语义网络分析、情感分析 简介 ROST CM 6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。 社会网络和语义网络分析(S) 数据 注意,保存时编码要为ANSI 所以这里需要转换一下 准备自定义表与停词表 例如 同时,点击快速分析后,将会弹出网络图 对网络图进行设置 对布局进行设置 对节点、边进行设置 最终效果图 修改 情感分析 阅读详情

概述

从前面的章节我们知道HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。

HttpHandler与HttpModule简单来说其实都是对一个请求上下文的处理,但它们两个所处的功能角色是完全不一样的。我暂时还想不出一个既简单又能体现HttpHandler优点的场景来,其实Page类就是一个实现了IHttpHandler的类,在Ajax中也有相关的实现,以及Asp.Net Forums V2中有两个比较简单的实现(AvatarHttpHandler和VCardHttpHandler),大家可以去参考一下。

下面是一个检查用户是否登录及模块授权的HttpModule示例。

 

场景

一个网站,有一个首页(Default.aspx),一个登录页面(Login.aspx),两个模块(模块1和模块2)。

一、               当用户在未登录的情况下访问网站的任一个页面都会跳转到登录页面要求用户登录,登录完成后跳转到网站首页并在每个页面上显示欢迎词。

二、               假设有两个用户,一个“文野”,一个“stwyhm”,文野可以访问模块1,stwyhm可以访问模块2,当他们访问各自有权访问的模块时,显示模块给出的欢迎词,如果访问的模块没有访问权限,给出错误提示。其它用户只能访问指定模块以后的页面。

 

示例

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

 

namespace AuthorizationModule

{

    /// <summary>

    /// 说明:检查用户登录的Module

    /// 作者:文野

    /// 联系:stwyhm.cnblogs.com

    /// </summary>

    public class UserAuthorizationModule : IHttpModule

    {

        #region IHttpModule 成员

 

        public void Dispose()

        { }

 

        public void Init(HttpApplication context)

        {

            context.AcquireRequestState += new EventHandler(context_AcquireRequestState);

        }

 

        void context_AcquireRequestState(object sender, EventArgs e)

        {

            // 获取应用程序

            HttpApplication application = (HttpApplication)sender;

 

            // 检查用户是否已经登录

            if (application.Context.Session["UserName"] == null || application.Context.Session["UserName"].ToString().Trim() == "")

            {

                // 获取Url

                string requestUrl = application.Request.Url.ToString();

                string requestPage = requestUrl.Substring(requestUrl.LastIndexOf('/') + 1);

 

                // 如果请求的页面不是登录页面,刚重定向到登录页面。

                if (requestPage != "Login.aspx")

                    application.Server.Transfer("Login.aspx");

            }

            else

            {

                // 已经登录,向每个请求的页面打印欢迎词。

                application.Response.Write(string.Format("欢迎您!{0}!", application.Context.Session["UserName"]));

            }

        }

 

        #endregion

    }

 

    /// <summary>

    /// 说明:检查用户是否有权使用模块的Module

    /// 作者:文野

    /// 联系:stwyhm.cnblogs.com

    /// </summary>

    public class SystemModuleAuthorizationModule : IHttpModule

    {

 

        #region IHttpModule 成员

 

        public void Dispose()

        {

        }

 

        public void Init(HttpApplication context)

        {

            context.AcquireRequestState += new EventHandler(context_AcquireRequestState);

        }

 

        void context_AcquireRequestState(object sender, EventArgs e)

        {

            HttpApplication application = (HttpApplication)sender;

 

            // 如果用户未登录,则无需检查模块授权,因为请求会被用户登录Module重定向到登录页面。

            if (application.Session["UserName"] == null)

                return;

 

            // 获取用户名和Url

            string userName = application.Session["UserName"].ToString();

            string url = application.Request.Url.ToString();

 

            // 如果用户没有被授权,请求被终止,并打印提示信息。

            if (!Validator.CanUseModule(userName, url))

            {

                application.CompleteRequest();

                application.Response.Write(string.Format("对不起!{0},您无权访问此模块!", userName));

            }

        }

 

        #endregion

    }

 

    public class Validator

    {

        /// <summary>

        /// 检查用户是否被授权使用模块。

        /// 文野可以使用模块,stwyhm可以使用模块,所有用户都可以请求限定模块以外的页面

        /// </summary>

        /// <param name="userName"></param>

        /// <param name="url"></param>

        /// <returns></returns>

        public static bool CanUseModule(string userName, string url)

        {

            if (!url.Contains("模块"))

                return true;

            else if (userName == "文野" && url.Contains("模块1"))

                return true;

            else if (userName == "stwyhm" && url.Contains("模块2"))

                return true;

            else

                return false;

        }

    }

}

页面中除了简单的登录保存用户名到Session的代码及一些Html呈现代码外无任何代码。

 

执行结果

第一步:打开网站首页,因示登录被跳转到登录页面


 

第二步:登录成功后跳转到首面。

 


 

第三步:访问有权进入的模块1

 


 

第四步:访问无权进入的模块2

 


 

开发注意点

    无论是通过Url发出请求,还是一个按钮引起的页面回发,对IIS来说是一样的,都是一次请求。而HttpModule中的事件一般都在页面事件前,特别是控件事件,所以如果在HttpModule的事件中对请求进行过滤处理后就不会执行到页面事件或控件事件,这就是上面示例的UserAuthorizationModule代码中为什么要对请求页面是否是Login.aspx进行判断的原因了。

 

总结

这里两个自定义的HttpModule实现了它们各自所要达到的过滤请求的功能,一个限制用户登录,一个限制模块访问,当然实际应用中比这要复杂许多。这样的验证方式是简单的、安全的,代码在修改时只要修改相应的HttpModule就可以了,无需在每个页面都写相同的验证代码,也不会发生在Url地址栏里输入一段Url就可以跳过登录及其它验证的情况了。在这两个HttpModule中,因为都要涉及到对Session的访问,所有都使用了AcquireRequestState事件,大家可以根据实际情况使用不同的事件,可以参考我前面文章中的那副HttpModule生命周期图。

【python3.7】解决报错 error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ 解决pip安装py7zr遇到的报错问题。 阅读详情

相关推荐

多仓智能订单路由与动态优化方案设计

现在有很多商家会有多个仓库,并分布在不同的城市中,当用户下单后会根据商品库存及订单信息将订单分配到对应的仓库进行发货,如就近原则,本期基于多仓库设计一套订单路由方案,包含核心逻辑、规则优先级和实施方案,适用于多仓协同的订单自动分配场景

14年产品经理老兵,想把自己的经验及总结分享给大家,只讲思路及实操,不讲废话 2481

一点一点学ASP.NET之示例——HttpModule 示例

HttpModule 示例 —— 一点一点学ASP.NET 文野:2006年8月11日星期五 概述 从前面的章节我们知道HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。 ...

weixin_30487317的博客 259

Cherry Studio部署MCP服务报错全记录:从零解决‘Connection closed‘问题

本文详细记录了在Cherry Studio中部署MCP服务时遇到‘Connection closed’报错的完整排查与解决过程。文章从环境依赖(UV、Bun)的安装验证、绝对路径配置、网络镜像源设置,到服务端手动调试与Cherry Studio配置检查,提供了一套系统性的解决方案,帮助开发者彻底解决此类连接问题。

g9h0i1的博客 764

应用HttpModule实现权限系统的案例

介绍了一个应用HttpModule实现权限系统的案例。HTTP 处理管道的基本模型要对HttpModule和IHttpHandler进行研究,必须先对ASP.Net的处理管道有一个了解。 在ASP.Net应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Request),ASP.NET应用程序的处理模式可称之为HTTP处理管道。

大伟先生 721

二次开发vba_CATIA VBA(VBS)二次开发:使用Search批量选择元素

在CATIA二次开发中很多在程序中进行自动交互的方法或函数都需要使用选择集作为参数,将几何元素按照要求批量添加到选择集中也是实现程序自动运行的有效方法。在前面的文章《CATIA使用VBA(VBS)二次开发时用户的交互选择》和《CATIA使用VBA(VBS)二次开发时工程图和草图位置的交互选择函数Indicate2D》中介绍了在CATIA VBA(VBS)二次开发中用户和选择集之间的交互操...

weixin_32497403的博客 1321

双目立体匹配算法:SGBM

SGBM(Semi-Global Block Matching)是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。它是基于全局匹配算法和局部匹配算法的优缺点,提出了一种折中的方法,既能保证视差图的质量,又能降低计算复杂度。

weixin_45303602的博客 9407

ASP.NET 控制用户的登录

重新添加一个PageBase 一个类,让每个页面继承PageBase这个类,而PageBase这个类继承System.Web.UI.Page   这个PageBase类: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security;

jiguoweijk的专栏 744

量化投资之工具篇一:Backtrader从入门到精通(1)-手把手教你零基础实现一个策略案例

Backtrader是重要的量化框架,本文记录学习该框架的笔记,内容主要基于Backtrader的网站指导文档。虽然该框架目前用于量化投资领域,但是可以作为数据处理的基本架构,进行改造后用于各种数据的处理,尤其适用于对原始数据处理完成后应用一定的策略进行预测以及可视化处理。 1、简介 Backtrader的特点,就是两点: 1、易于使用; 2、参见第1条。 那么如何使用Backtrader呢?比把大象装进冰箱复杂点,一共4步: 创建一个Cerebro引擎: 加入一个Strategy...

仓鼠王的博客 5万+

ASP中限制用户没有登录就不能进入其他页面

效果: 如果用户没有登录直接试图打开其他界面(可能是通过别人发过来的链接),那么提示未登录,同时跳转至登录界面 思路:  1、用户登录成功后用session保存用户信息。  2、打开其他界面时检测session,如果session为空,则执行提示跳转动作 具体步骤: 1、先写一个公共类,判断用户是否登录,如果没登录则跳转至登录界面,这个公共类给所有页面调用 public class

Lizhifun 6472

lammps建模(电解液)opls-aa力场的基本流程

lammps建模(电解液)opls-aa力场的基本流程

syj0922的博客 2133

【四足机器人项目实战】四足机器人弹簧倒立摆(SLIP)动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1.动力学建模构型方法2.四足机器人动力学模型(1)多体动力学模型【针对躯干+脚建模】方法一:VMC(VirtualModelController)模型方法二:SLIP模型(2)浮基单体动力学模型【针对躯干建模】【用于MPC】 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简

qq_35635374的博客 7312

HttpModule 示例(转载)

概述 从前面的章节我们知道HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。 HttpHandler与HttpModule简单来说其实都是对一个请求上下文的处理,但它们两个所处的功能角色是完全不...

weixin_30391339的博客 85

28、基于图像快速序列视觉呈现(RSVP)的脑机接口特征提取与分类算法综述

本文综述了基于图像快速序列视觉呈现(RSVP)的脑机接口(BCI)中的特征提取与分类算法。RSVP技术通过快速连续呈现图像序列,结合脑电图(EEG)信号分析,实现对目标图像的识别和标记。文章详细介绍了RSVP实验的设计、EEG数据的采集与预处理,并探讨了低信噪比、维度灾难、重叠epoch和不平衡数据集等挑战。针对特征提取,讨论了有监督空间滤波方法(如CSP、xDAWN、LDA波束形成器)的原理和应用。在分类策略部分,涵盖了线性分类技术(如LDA、BLR、LR、SVM)和非线性分类方法(如MLP、CNN)。文

hh234的博客 337

类似于HttpModule的注入方式的事件机制示例

实现了类似于HttpModule的注入式插件机制,可以灵活的通过配置里面增加了响应事件,适用于Web程序。 本例以建筑物开始建造为例,开始建造和结束建造分别为两个事件,类似于HttpModule中的Begin_Request和End_Request,用户可以在事件发生时注入自己的业务逻辑。 限于时间暂无法有详细篇幅说明原理,提供完整示例代码供参考学习。 代码下载:http://files.c...

weixin_34149796的博客 68

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Asp.net基础概念之 HttpModule 示例

概述 从前面的章节我们知道HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。 HttpHandler与HttpModule简单来说其实都是对一个请求上下文的处理,但它们两个所处的功能角色是完全不一样...

weixin_34418883的博客 78

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

关于使用HttpModule模块处理登录验证示例

 Http模块(HttpModule)和Http处理程序(HttpHandler)都是用来响应用户请求事件的程序,但二都作用不一.HTTP 模块是一个在每次针对应用程序发出请求时调用的程序集。ASP.NET HTTP 处理程序是响应对 ASP.NET Web 应用程序的请求而运行的过程(通常称为“终结点”)。若程序中调用了用户自定的HttpHandler程序,将会覆盖程序内置的HttpHand

小蜗牛的专栏 1960

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: HttpHandler
下一篇: windows 2012 安装 .net framwork3.5报错
子非余不知渔之乐
博客等级 码龄19年 56粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值