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. opencv,关于物体检测

    关于物体检测 环境:opencv 2.4.11+vs2013 参考: http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.htm ...

  2. 基于jquery的表单校验插件 - rjboy的Validform使用体验

    官方地址:http://validform.rjboy.cn/document.html 引用js后再加上以下css就可以使用了 .Validform_checktip{ margin-left:8p ...

  3. 内联函数inline

    1:使用inline函数的时候,必须使函数体和inline说明结合一起,否则编译器将视他为普通函数处理: false: inline void Coord::setcoord(int a,int b) ...

  4. 树莓派自身摄像头的opencv调用

    很多人知道,opencv不能直接对树莓派原装摄像头进行调用,因为raspicam不是V4L驱动,怎样才能使用树莓派原装摄像头,它可比多数usb摄像头清晰和小巧. 具体方法,给树莓派原装摄像头安装一个可 ...

  5. 不容错过错的xcode 插件 转至于cocoachina

    古人云“工欲善其事必先利其器”,打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径!以下是搜集的一些有力的XCode插件.   1.全能搜索家CodePilot 2.0 你要找的是文件?是文件夹? ...

  6. Python深入03 对象的属性

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python一切皆对象(object),每个对象都可能有多个属性(attribut ...

  7. NPOI高效匯出Excel

    using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using NPOI. ...

  8. 基于NPOI的Execl导入导出例子

    源地址:http://bbs.csdn.net/topics/390830774

  9. [Flex] PopUpButton系列——CornerRadius的运用

    <?xml version="1.0" encoding="utf-8"?><!--设置主按钮圆角半径 PopUpButtonCornerRa ...

  10. FreeMarker页面中获得contextPath

    要在ftl页面中使用contextPath,需要在viewResolver中做如下配置(红色部分): <bean id="viewResolver" class=" ...