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. Git Step by Step

    原文地址:http://www.cnblogs.com/wilber2013/category/643754.html 1.Git简介 2.Git本地仓库 3.Git对象模型 4.探索.git目录 5 ...

  2. centos7 安装中文编码

    运行如下 yum groups mark install "Chinese Support"

  3. NoSQL分类及ehcache memcache redis 三大缓存的对比

    NoSQL分类 由于NoSQL中没有像传统数据库那样定义数据的组织方式为关系型的,所以只要内部的数据组织采用了非关系型的方式,就可以称之为NoSQL数据库.目前,可以将众多的NoSQL数据库按照内部的 ...

  4. H2 database的使用

    H2最完整的资料下载地址: http://download.csdn.net/detail/yixiaoping/5956595       H2数据库使用   H2数据库介绍 常用的开源数据库:H2 ...

  5. Linux下SVN服务器安装配置及客户端安装说明

    原文地址:http://wenku.baidu.com/link?url=h3dVAMx4azpOXEND5HQEE6nliE8-zc0GSQ03yv4cUs1vXMALXF64UsK7kT7kXm_ ...

  6. SQL Server 2008 建立分区表 脚本

    /*第一步:创建分区函数*/Create partition function Part_func_Bag(varchar(20)) as range right /*正式区间for values(N ...

  7. 程序员遇到Bug时的30个反应

    开发应用程序是一个非常有压力的工作.没有人是完美的,因此在这个行业中,代码中出现bug是相当普遍的现象.面对bug,一些程序员会生气,会沮丧,会心烦意乱,甚至会灰心丧气,而另一些程序员会依然保持冷静沉 ...

  8. Google是如何做代码审查的?

    Google是一个非常优秀的公司.他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部.有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论.这就是我今天要说的. ...

  9. dirname basename 截取路径中的目录以及文件名

    dirname basename    截取路径中的目录以及文件名 windows 下面: #include "shlwapi.h"#pragma comment(lib, &qu ...

  10. oracle查询锁和杀锁

    查询锁: SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machine, ...