使用IHttpHandler做权限控制[ASP.NET | IHttpHandler | AjaxPro | UserHostName]

正文

     Web.Config配置如下:

<add verb="POST,GET" path="/page/*.aspx,/page/*/*.aspx,/page/*/*/*.aspx,/page/*/*/*/*.aspx,/page/*/*/*/*/*.aspx" type="WebLibrary.PowerManage.HttpHanderPowerControls"/>

     整个IHttpHandler实现代码如下:

    /// <summary>
    
/// 本HttpHanderPowerControls可以控制权限,但是在使用AjaxPro的时候AjaxPro.Utility.RegisterTypeForAjax需要指定第二个参数,否则会报错
    
///     如:AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default),Page);
    
/// </summary>
    public class HttpHanderPowerControls : IHttpHandler, IRequiresSessionState
    {

        
/// <summary>
        
///  获取一个值,该值指示其他请求是否可以使用 System.Web.IHttpHandler 实例。
        
/// </summary>
        public bool IsReusable
        {
            
get { return true; }
        }

        
public void ProcessRequest(HttpContext context)
        {
            HttpSessionState session 
= context.Session;
            
//权限判断
            if (session["uname"!= null && !string.IsNullOrEmpty(session["uname"].ToString()))
            {
                
//Type type = BuildManager.GetCompiledType(path);
                
//ASP.NET 1.1使用以下语句获得IHttpHandler
                
//context.Server.Transfer(PageParser.GetCompiledPageInstance(path, context.Request.PhysicalPath, context),true);
                
//AjaxPro.Utility.RegisterTypeForAjax(type, handler as Page);
                context.Server.Transfer(BuildManager.CreateInstanceFromVirtualPath(context.Request.Path, typeof(Page)) as IHttpHandler, true);
            }
            
else
            {
                context.Server.Transfer(
"/login.aspx");
            }
        }
    }

 

     代码说明:

               1.     这里我只截获.aspx的文件请求访问,所以CreateInstanceFromVirtualPath第二个参数指定成typeof(Page)就行了,当然也可以用BuildManager.GetCompiledType(path)获得它的Type,调试的时候我发现这行代码比较费时间,而且也不需要就直接用了Page了

               2.     BuildManager.CreateInstanceFromVirtualPath 方法 MSDN说法:处理给定了虚拟路径的文件,并创建结果的实例。      [分享]在自定义的HttpHandler中调用.net默认HttpHandler的方法 提供的是我注释掉的部分,是ASP.NET 1.1使用,当然2.0下也能使用!

     流程说明:

               用户访问根目录下/page目录下的aspx页面,将被HttpHanderPowerControls截获,在ProcessRequest里进行权限判断,如果有权限的话继续执行页面(手动创建编译指定的页面的实例);如果没有权限,跳转到login页面。

 

注意问题:

     1.     在使用AjaxPro的时候AjaxPro.Utility.RegisterTypeForAjax需要指定第二个参数,例如:AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default),Page);

             指定为Page就行了,否则会报错显示类型转换失败!

     2.     path的匹配问题,他不能匹配子目录内的文件,支持简单的*、?通配符,例如:/page/*  -> 就只能匹配page目录下的文件 /page/*/* -> 能匹配page目录下任意一级子目录下的文件。

     3.     在使用验证码的时候注意了,如果也是用Page页返回并且在权限控制范围内的话注意要过滤掉!

 

遗留问题:

     1.     这样做到底会不会造成性能上的损害?!

     2.     对于属性IsResult仍然持不理解状态!

 

结束

     欢迎大家交换意见,继续探索权限控制方面在ASP.NET中的解决方案:)



本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586473,如需转载请自行联系原作者

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

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

相关文章

[转载] Java 中字符串转整型和整型转字符串

参考链接&#xff1a; Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码&#xff0c;字符串为纯数字的情况下&#xff0c;调用Integer的静态方法parseInt或者valueOfJava代码&#xff0c;如果单个字符或字符串&#xff0c;需要切…

Gram matrix 格拉姆矩阵

2019独角兽企业重金招聘Python工程师标准>>> Gram matrix 度量各个维度自己的特性以及各个维度之间的关系。 来自&#xff1a;https://www.zhihu.com/question/49805962?fromprofile_question_card 由感知机&#xff08;对偶感知机中需要计算样本点两两之间的内积和…

[转载] 用Java语言实现对十六进制字符串异或运算

参考链接&#xff1a; 交换两个字符串&#xff0c;而无需在Java中使用第三个用户定义的变量 前言&#xff1a;好久没有写博客&#xff0c;最近一年感觉真是好忙&#xff0c;各种做不完的工作。相信很多上班族都会有这种感觉。最近对NFC进行写卡操作&#xff0c;需要计算一个校…

MySQL日常应用操作记录

1.知道一个字段名&#xff0c;怎样查到它在数据库里的哪张表里&#xff1f; USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME字段名称; MySQL中查看库表字段信息都在information_schemal中&#xff0c;获取数据字典等信息都要通过这个视图。 如&…

[转载] 【Java】将一个字符串的字符排序,按ASCII表的顺序从小到大

参考链接&#xff1a; 在Java中搜索字符串中的字符和子字符串 将一个字符串的字符按ASCII表的顺序从小到大排序&#xff0c;如将字符串“asdafxcvMADb”排序为“ADMaabcdfsvx” 算法的基本思想&#xff1a; 先将字符串转化为一个char类型的数组&#xff0c;来进行存储&#xf…

如果只做前端验证的话,谈jjdd.com的看照片功能。

如果你在上海&#xff0c;并且坐过地铁的话&#xff0c;你肯定知道jjdd.com。 这个网站和百合&#xff0c;世纪佳缘类似&#xff0c;都是交朋友的性质。 在jjdd.com中有个很重要的功能&#xff1a;如果你上传的照片比你想看的人少的话&#xff0c;你是不能看她的照片的。 例如如…

[转载] 快速学习-Mybatis框架概述

参考链接&#xff1a; Java在竞争性编程中的快速I/O 第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法;另一种定义认为&#xff0c;框架是可被…

3、MySQL的数据类型介绍

上一章节内容主要介绍了一些MySQL中对表和库的增删改查操作&#xff0c;对于上一章中对与表中字段的一些定义进行说明&#xff0c;本章主要介绍关于数据库类型的一些定义。一、概述&#xff1a;MySQL数据库中的数据大致可以分为以下几类&#xff0c;从而实现数据库在操作的时候…

[转载] 必须要会回答的Java面试题(字符串篇)

参考链接&#xff1a; 比较Java中的两个字符串String 最近很多学习java的小白问我字串相关的问题&#xff0c;觉得很有必要整理下&#xff0c;以方便初学者理解字符串以及应对今后面试中考官的提问。 如果你是有几年Java开发经验&#xff0c;可以根据目录选择性的阅读以下内…

[转载] java如何实现一个字符串的反转和替换

参考链接&#xff1a; 反转Java中的字符串String 一、java字符串的反转 1.利用java字符串的拼接实现字符串的反转&#xff0c;代码如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

java 中的instanceof

java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出&#xff0c;这个对象是否是这个特定类或者是它的子类的一个实例。 用法&#xff1a;result object instanceof class参数&#xff1a;Result&#xff1a;布尔类…

[转载] 将一个整数型字符串转换为一个整数

参考链接&#xff1a; Java中整数到字符串转换的不同方法 package com.utl.string; /* * 将一组整数字符串转换为整数 * 例&#xff1a;"234"转换为整数型234 * 分析&#xff1a;涉及到许多问题&#xff0c;例如非法输入&#xff0c;有正负号&#xff0c;是否为空字…

升级PowerShell至4.0版本

为了更好的使用Cmder v1.2&#xff0c;不得不升级PowerShell为4.0。 不知道Cmder的&#xff0c;可以点击这里&#xff1a;https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是运行在Windows机器上实现系统和应用程序管理自动化的命令行脚本环境。 需要.NET环境…

[转载] 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值

参考链接&#xff1a; 从Java中的字符串中删除前导零 字符串太长 pep8 Python f-strings or formatted strings are the new way to format strings. This feature was introduced in Python 3.6 under PEP-498. It’s also called literal string interpolation. Python f字符…

备忘(持续更新。。。)

1、在springmvc这个框架里面&#xff0c;创建新的业务逻辑层&#xff0c;dao、service层至少需要一个接口&#xff0c;项目才能跑起来 2、获取当前用户桌面路径 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

[转载] 字符串操作截取后面的字符串_对字符串的5个必知的熊猫操作

参考链接&#xff1a; 修剪Java中的字符串(删除前导和尾随空格) 字符串操作截取后面的字符串 We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually co…

更改域控制器的计算机名

林功能级别必须为Windows Server 2003及以上 1. netdom computername Server08-1.contoso.com /add:08Server1.contoso.com 2. netdom computername Server08-1.contoso.com /makeprimary:08Server1.contoso.com 3. Restart your computer 4. netdom computername 08Server1.co…

[转载] Google Java代码规范

参考链接&#xff1a; 使用Java计算文本文件txt中的行数/单词数/字符数和段落数 原文地址&#xff1a;https://google.github.io/styleguide/javaguide.html GIthub上GoogleCode风格的配置文件&#xff08;支持Eclipse IDE和IntelliJ IDE&#xff09;&#xff1a;https://git…

SQL PASS西雅图之行——签证篇

本人有幸通过IT168&itpub的站庆活动http://www.itpub.net/thread-1716961-1-1.html&#xff0c;并应微软邀请参加了在西雅图举办的The Conference for SQL Server Professionals&#xff08;简称SQL-PASS&#xff09;。 SQL-PASS会议计划于2012年11月6日-9日举行&#xff0…

[转载] java8 lambda表达式 List转为Map

参考链接&#xff1a; 使用Lambda表达式检查字符串在Java中是否仅包含字母 public static void main(String[] args) { List<User> userList new ArrayList<User>(); User user0 new User("han1", "男1", 20); User user1 new User("…