using Dscf.Client.Web.Class;
using Dscf.Client.Web.DscfService;
using Dscf.Client.Web.Handler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Web;
using System.Web.SessionState;
namespace Dscf.Client.Web.HttpModules
{
    public class Authentication : IHttpModule, IRequiresSessionState
    {
        public void Dispose() { }
        public void Init(HttpApplication context)
        {
            //在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件
            context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;
        }
        private void context_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            Uri uri = application.Context.Request.Url;
            string loginUrl = "/View/Login.aspx";
            if (!GetCommonUrl().Contains(uri.AbsolutePath.ToLower())    
                && !uri.AbsolutePath.StartsWith("/combres.axd/")
                && (uri.AbsolutePath.Contains(".aspx") || uri.AbsolutePath.Contains(".ashx")))
            {
                OperaterInfo oper = application.Context.Session["Operator"] as OperaterInfo;
                if (oper == null)
                {
                    application.Response.Redirect(loginUrl, true);
                }
                List<PageRights> rights = application.Session["Rights"] as List<PageRights>;
                if (rights == null || rights.Count <= 0)
                {
                    if (oper.Roles == null || oper.Roles.Length <= 0)
                    {
                        GoToForbiddenPage(application.Context);
                    }
                    else
                    {
                        rights = new List<PageRights>();
                        foreach (var role in oper.Roles)
                        {
                            rights.AddRange(role.PageRights);
                        }
                        application.Session["Rights"] = rights;
                    }
                }
                int type;
                int.TryParse(application.Request["type"], out type);
                var right = rights.FirstOrDefault(m => m.PageUrl.Trim().ToLower() == uri.AbsolutePath.ToLower() && m.EditRight == type);
                if (right == null)
                {
                    if (uri.AbsolutePath.EndsWith(".ashx"))
                    {
                        application.Response.Write(new ResultMessage(false, "您没有权限进行此操作,请联系管理员获取更高权限!"));
                        application.Response.End();
                    }
                    else
                    {
                        GoToForbiddenPage(application.Context);
                    }
                }
            }
        }
        private void GoToForbiddenPage(HttpContext context)
        {
            context.Response.Redirect("/Error/forbidden.html", true);
        }
        private List<string> GetCommonUrl()
        {
            List<string> list = new List<string>();
            list.Add("/View/Login.aspx".ToLower());
            list.Add("/View/FinaInvestList.aspx".ToLower());
            list.Add("/Handler/Login.ashx".ToLower());
            list.Add("/View/InvestLogin.aspx".ToLower());
            list.Add("/Handler/InvestLoginHandler.ashx".ToLower());
            list.Add("/Handler/FinaInvestHandler.ashx".ToLower());
            list.Add("/Handler/kefile_manager_json.ashx".ToLower());
            list.Add("/Handler/keupload_json.ashx".ToLower());
            list.Add("/Handler/CodeHandler.ashx".ToLower()); 
            list.Add("/Handler/IsUserInfoExistHandler.ashx".ToLower());
            list.Add("/Handler/JumpLoginHandler.ashx".ToLower());
            list.Add("/");
            return list;
        }
    }
}

在ASP.NET开始执行HTTP请求的处理程序之前的更多相关文章

  1. asp.net Ajax Post 请求一般处理程序

    其实很早就开通博客园了,一直想写些有价值的东西,供自己以后查阅的同时,也可以帮助别人遇到此类问题时能有一个好的解决方法.但是由于各种原因, 就没有实施我的想法.今天突然很想写下一篇文章,不知道我的第一 ...

  2. http请求在asp.net中的请求过程

    当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会 ...

  3. 详解ASP.NET MVC的请求生命周期

    本文的目的旨在详细描述asp.net mvc请求从开始到结束的每一个过程. 我希望能理解在浏览器输入url并敲击回车来请求一个asp.net mvc网站的页面之后发生的任何事情. 为什么需要关心这些? ...

  4. ASP.NET之自定义异步HTTP处理程序(图文教程)

    前面我们学习了关于关于自定义同步HTTP处理程序,相信大家可能感觉有所成就,但是这种同步的机制只能对付客户访问较少的情况或者数据处理量不大的情况,而今天这篇文章就是解决同步HTTP处理程序的这个致命缺 ...

  5. ASP.NET 跨域请求之jQuery的ajax jsonp的使用解惑 (转载)

    前天在项目中写的一个ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法,直接执行了error方法提示错误——ajax jsonp之前并没有用过,对其的理解为跟普 ...

  6. Asp.net MVC进入请求管道的过程

    Asp.net MVC进入请求管道的过程 Asp.Net MVC 跟AspNet 入口解释 Asp.Net MVC请求处理过程 mvc 请求模型 mvc的原理 mvc模型 NewMVCPipleLin ...

  7. ASP.NET MVC的请求生命周期

    我希望能理解在浏览器输入URL并敲击回车来请求一个ASP.NET MVC网站的页面之后发生的任何事情. 为什么需要关心这些?有两个原因.首先是因为ASP.NET MVC是一个扩展性非常强的框架.例如, ...

  8. js页面(页面上无服务端控件,且页面不刷新)实现请求一般处理程序下载文件方法

    对于js页面来说,未使用服务端控件,点击下载按钮时不会触发服务端事件,且不会提交数据到服务端页面后台进行数据处理,所以要下载文件比较困难.且使用jQ的post来请求一般处理程序也不能实现文件的下载,根 ...

  9. 使用 NLog 给 Asp.Net Core 做请求监控

    为了减少由于单个请求挂掉而拖垮整站的情况发生,给所有请求做统计是一个不错的解决方法,通过观察哪些请求的耗时比较长,我们就可以找到对应的接口.代码.数据表,做有针对性的优化可以提高效率.在 asp.ne ...

随机推荐

  1. Spark on yarn配置项说明与优化整理

    配置于spark-default.conf 1. #spark.yarn.applicationMaster.waitTries  5 用于applicationMaster等待Spark maste ...

  2. DBA_Oracle基本体系内存和进程结构(概念)

    2014-08-05 Created By BaoXinjian

  3. suibi1117

    测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等. 我所了解的模块接口测试大体分为两类:模块接口测试和web接口测试 模块接口测试是单元测试的基础.它主要测试模块的调用 ...

  4. python (3)简单语法:字符串(strip函数),数据类型

    一:字符串重复,索引,切片(字符串命令strip) 函数原型strip 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除序列的 ...

  5. MySQL的时间进位问题

    mysql更新到5.6.4 之后 , 新增了一个叫factional seconds的特性 , 可以记录时间的毫秒值. 但是目前的数据库是不记录毫秒值的 , 所以会产生一个java中时间的Millis ...

  6. contentProvider 内容提供者

    http://blog.csdn.net/woshixuye/article/details/8280879 实例代码当数据需要在应用程序间共享时,我们就可以利用ContentProvider为数据定 ...

  7. php判断用户客户端是否是微信内置客户端

    微信内置浏览器的渲染方式在某些方面和其他浏览器不同,所以有时候需要做一些兼容性处理,那么就需要判断是否是微信内置浏览器.最好的判断方式就是通过 User Agent 来判断. 工具/原料   php ...

  8. StringIO 模块用于在内存缓冲区中读写数据

    模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分函数都与对文件的操作方法类似. 例: #coding=gbk import StringIO s=StringIO ...

  9. 读取缓存模拟----FIFO

    本例是模拟缓存的存储和读取. 存储:使用一个Map来存放,key是文件名,值为缓存对象 读取:返回相应的key对应的缓存.(如果缓存被修改,就重新加载缓存,再从缓存Map中读取相应缓存) 测试类:每2 ...

  10. quartz定时任务时间设置描述

    这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , ...