博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用httpModule做权限系统
阅读量:4967 次
发布时间:2019-06-12

本文共 3045 字,大约阅读时间需要 10 分钟。

页面请求过程:

根据这个流程,网上一般的权限验证在:
Http.Module.AuthorizeRequest
Http.Module.PreRequestHandlerExecute 
例如使用前者:

using  System;
using  System.Web;
using  System.Security.Principal;
namespace  MyModules
{
     public   class  CustomModule : IHttpModule
    {
         public  CustomModule() { }
         public   void  Dispose() { }
         public   void  Init(HttpApplication app)
        {
             // 建立安全模块   
            app.AuthenticateRequest  +=   new  EventHandler( this .AuthenticateRequest);
        }
         private   void  AuthenticateRequest( object  o, EventArgs e)
        {
            HttpApplication app  =  (HttpApplication)o;
            HttpContext content  =  (HttpContext)app.Context;
             if  ((app.Request[ " userid " ]  ==   null )  ||  (app.Request[ " password " ]  ==   null ))
            {
                content.Response.Write( " 未提供必需的参数!! " );
                content.Response.End();
            }
             string  userid  =  app.Request[ " userid " ].ToString();
             string  password  =  app.Request[ " password " ].ToString();
             string [] strRoles  =  AuthenticateAndGetRoles(userid, password);
             if  ((strRoles  ==   null )  ||  (strRoles.GetLength( 0 )  ==   0 ))
            {
                content.Response.Write( " 未找到相配的角色!! " );
                app.CompleteRequest();
            }
            GenericIdentity objIdentity  =   new  GenericIdentity(userid,  " CustomAuthentication " );
            content.User  =   new  GenericPrincipal(objIdentity, strRoles);
        }
         private   string [] AuthenticateAndGetRoles( string  r_strUserID,  string  r_strPassword)
        {
             string [] strRoles  =   null ;
             if  ((r_strUserID.Equals( " Steve " ))  &&  (r_strPassword.Equals( " 15seconds " )))
            {
                strRoles  =   new  String[ 1 ];
                strRoles[ 0 ]  =   " Administrator " ;
            }
             else   if  ((r_strUserID.Equals( " Mansoor " ))  &&  (r_strPassword.Equals( " mas " )))
            {
                strRoles  =   new   string [ 1 ];
                strRoles[ 0 ]  =   " User " ;
            }
             return  strRoles;
        }
    }
}

 

  编辑Web.config文件:   
   < system .web >    
   < httpModules >    
           < add    name ="Custom"    type ="MyModules.CustomModule,Custom" />    
   </ httpModules >    
   </ system.web >   

 

  Custom.aspx页面内容:   
    
   < script    language ="c#"    runat ="server" >    
  public    void    page_load(Object   obj,EventArgs   e)   
  {   
    lblMessage.Text    =     " <H1>Hi,    "     +    User.Identity.Name    +     " </H1> " ;   
     if (User.IsInRole( " Administrator " ))   
          lblRole.Text = " <H1>You   are   an   Administrator</H1> " ;   
     else     if (User.IsInRole( " User " ))   
          lblRole.Text    =     " <H1>You   are   a   normal   user</H1> " ;   
  }   
   </ script >    
   < form    runat ="server" >    
   < asp:Label    id ="lblMessage"    forecolor ="red"    font-size ="10pt"    runat ="server" />    
   < asp:Label    id ="lblRole"    forecolor ="red"    font-size ="10pt"    runat ="server" />    
   </ form >

或者使用后者:

using  System;
using  System.Web;
namespace  MyModule
{
     public   class  MyModule : IHttpModule
    {
         public   void  Init(HttpApplication application)
        {
            application.AcquireRequestState  +=  ( new
            EventHandler( this .Application_AcquireRequestState));
        }
         private   void  Application_AcquireRequestState(Object source, EventArgs e)
        {
            HttpApplication Application  =  (HttpApplication)source;
            User user  =  Application.Context.Sesseion[ " User " ];   // 获取User
             string  url  =  Application.Context.Request.Path;
             // 获取客户访问的页面
            Module module  =  xx;  // 根据url得到所在的模块
             if  ( ! RightChecker.HasRight(user, module))
                Application.Context.Server.Transfer( " ErrorPage.aspx " );
             // 如果没有权限,引导到错误处理的页面
        }
         public   void  Dispose()
        {
        }
    }
}

转载于:https://www.cnblogs.com/sunshch/p/3691439.html

你可能感兴趣的文章
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
组件:slot插槽
查看>>
走进C++程序世界------异常处理
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
利用sed把一行的文本文件改成每句一行
查看>>
Android应用开发:核心技术解析与最佳实践pdf
查看>>
python——爬虫
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>
求一个字符串中最长回文子串的长度(承接上一个题目)
查看>>
简单权限管理系统原理浅析
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
php PDO (转载)
查看>>
wordpress自动截取文章摘要代码
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
scanf和gets
查看>>
highcharts 图表实例
查看>>