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. "运行时"如何解析类型引用

    先将下面的代码保存到文本中,存放到一个目录下面,E:\aa.txt public sealed class Program{ public static void Main(){ System.Con ...

  2. ArrayList,Vector线程安全性测试

    import java.util.ArrayList; import java.util.List; //实现Runnable接口的线程 public class HelloThread implem ...

  3. uboot 、内核、文件系统移植

    1. 参考下面博客: http://blog.csdn.net/andylauren/article/details/51448353 2.查看u盘: $ sudo fdisk -l 3. 格式化u盘 ...

  4. 关于JavaScript中apply与call的用法意义及区别(转)

    JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象. cal ...

  5. 使用jQuery解析xml时command节点解析失败

    jQuery版本1.8.3 待解析的xml为: <message><user><command>Login</command></message& ...

  6. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  7. (easy)LeetCode 205.Reverse Linked List

    Reverse a singly linked list. 解法一:记录单链表每个节点的val,然后重新为单链表赋值.(取巧,仅仅是将val部分改变,原始node节点并没有改变) 代码如下: /** ...

  8. (Array) 一个 N*N 的矩阵,每一行从左到右有序,每一列从上到下有序,都是递增,写个程序,判断一个数是否在矩阵中。

    int search(int d[N][N], int key) { int i1, i2, j1, j2; i1 = j1 = 0; i2 = j2 = N-1; while(i1 < i2 ...

  9. Linux下配置xampp

    How do I install XAMPP?Choose your flavor for your linux OS, the 32-bit or 64-bit version. Change th ...

  10. Unable to open serial port /dev/ttyUSB0

    ubuntu12.04使用USB转串口时出现权限不够问题,如下 Unable to open serial port /dev/ttyUSB0 权限不够 解决办法: 通过增加udev规则来实现.步骤如 ...