16-HttpModule

ASP.NET請求處理過程是基于管道模型的,這個管道模型是由多個HttpModule和HttpHandler組成腹缩,當(dāng)請求到達(dá)

HttpModule的時候委粉,系統(tǒng)還沒有對這個請求真正處理阻课,但是我們可以在這個請求傳遞到處理中(HttpHandler)

之前附加一些其它信息,或者截獲的這個請求并做一些額外的工作 峡扩。

本教程主要使用httpModule判斷是否登錄以及角色權(quán)限:

(1)未登錄用戶不能訪問Admin文件夾下所有文件(跳轉(zhuǎn)到登錄頁面)。

(2)登錄用戶障本,角色為super可以訪問Admin下所有文件教届。

(3)登錄用戶响鹃,角色為common只能訪問Admin下Book以及Order文件夾下資源,不能訪問SysManage文件夾

下資源案训。如果訪問SysManage文件夾下資源买置,跳轉(zhuǎn)到Admin下的Index,后臺管理首頁强霎。

一忿项、資料準(zhǔn)備

本示例程序沒有用到數(shù)據(jù)庫,使用一個泛型集合保存系統(tǒng)用戶信息城舞。

網(wǎng)站目錄結(jié)構(gòu)如下:

0014.PNG

實(shí)體類如下:

public class UserEntity
{
    public UserEntity()
    {
        ;
    }
    public UserEntity(string account, string pwd, string role)
    {
        this.Account = account;
        this.Pwd = pwd;
        this.Role = role;
    }

    public string Account { get; set; } //用戶名
    public string Pwd { get; set; } //密碼
    public string Role { get; set; } //角色(super-超級管理員,common-普通管理員)
}

二轩触、編寫HttpModule

創(chuàng)建一個UserLoginModule.cs文件,代碼如下:

//必須實(shí)現(xiàn)Init和Dispose方法
public class UserLoginModule:IHttpModule
{
    public UserLoginModule()
    {
        //
        //TODO: 在此處添加構(gòu)造函數(shù)邏輯
        //
    }

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public void Init(HttpApplication context)
    {
        //throw new NotImplementedException();
        //context.PreRequestHandlerExecute += Context_PreRequestHandlerExecute;
        context.AcquireRequestState += Context_PreRequestHandlerExecute;
    }

    private void Context_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;
        Uri url = context.Request.Url;

        if (url.AbsolutePath.ToLower().Contains("/admin"))
        {
            if (context.Session != null && context.Session["User"] == null)
            {
                context.Response.Redirect("~/Login.aspx?myurl=" + url.AbsolutePath);
            }
        }
        if (url.AbsolutePath.ToLower().Contains("/sysmanage"))
        {
            UserEntity User = new UserEntity();
            User = (UserEntity)context.Session["User"];
            if (User.Role.Equals("super") == false)
            {
                context.Response.Redirect("~/Admin/Index.aspx");
            }
        }
    }
}

三家夺、配置文件配置

根目錄下的web.config如下:

<?xml version="1.0"?>
<!--
  有關(guān)如何配置 ASP.NET 應(yīng)用程序的詳細(xì)信息怕膛,請?jiān)L問
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
    <!--IIS6配置-->
        <httpModules>
            <add name="LoginModule" type="UserLoginModule"/>
        </httpModules>
    
    </system.web>
  
  <!--IIS7配置-->
  <!--<system.webServer>
    <modules>
      <add name="LoginModule" type="UserLoginModule"/>
    </modules>
  </system.webServer>-->
  
</configuration>

四、用戶登錄

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h1>登錄</h1>
        <p>
            賬號:<asp:TextBox ID="txtAccount" runat="server"></asp:TextBox>
        </p>
        <p>
            密碼:<asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox>
        </p>
        <p>
            <asp:Button ID="btnLogin" runat="server" Text="登錄" onclick="btnLogin_Click"/>
            <asp:Label ID="lblInfo" runat="server" Text="" ForeColor="Red"></asp:Label>
        </p>
    </div>
    </form>
</body>
</html>
public partial class Login : System.Web.UI.Page
{
    public List<UserEntity> listUser = new List<UserEntity>();
    protected void Page_Load(object sender, EventArgs e)
    {
        listUser.Add(new UserEntity("admin", "admin", "super"));
        listUser.Add(new UserEntity("liudehua", "123456", "common"));
        listUser.Add(new UserEntity("zhoujielun", "123456", "common"));
    }

    #region 登錄
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        List<UserEntity> listTemp = new List<UserEntity>();
        listTemp = listUser.Where(p => p.Account.Equals(this.txtAccount.Text) && p.Pwd.Equals(this.txtPwd.Text)).ToList();
        if (listTemp.Count != 1)
        {
            this.lblInfo.Text = "用戶名或密碼錯誤!";
            return;
        }
        else
        {
            Session["User"] = listTemp[0];
            if (Request["myurl"] == null || Request["myurl"].Equals(""))
                Response.Redirect("~/Admin/Index.aspx");
            else
                Response.Redirect(Request["myurl"]);
        }
    }
    #endregion
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秦踪,一起剝皮案震驚了整個濱河市褐捻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椅邓,老刑警劉巖柠逞,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異景馁,居然都是意外死亡板壮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門合住,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绰精,“玉大人,你說我怎么就攤上這事透葛”渴梗” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵僚害,是天一觀的道長硫椰。 經(jīng)常有香客問我,道長萨蚕,這世上最難降的妖魔是什么靶草? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮岳遥,結(jié)果婚禮上奕翔,老公的妹妹穿的比我還像新娘。我一直安慰自己浩蓉,他們只是感情好派继,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布帮坚。 她就那樣靜靜地躺著,像睡著了一般互艾。 火紅的嫁衣襯著肌膚如雪试和。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天纫普,我揣著相機(jī)與錄音阅悍,去河邊找鬼。 笑死昨稼,一個胖子當(dāng)著我的面吹牛节视,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播假栓,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼寻行,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匾荆?” 一聲冷哼從身側(cè)響起拌蜘,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牙丽,沒想到半個月后简卧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烤芦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年举娩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片构罗。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡铜涉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遂唧,到底是詐尸還是另有隱情芙代,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布蠢箩,位于F島的核電站链蕊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谬泌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一逻谦、第九天 我趴在偏房一處隱蔽的房頂上張望掌实。 院中可真熱鬧,春花似錦邦马、人聲如沸贱鼻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邻悬。三九已至症昏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間父丰,已是汗流浹背肝谭。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛾扇,地道東北人攘烛。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像镀首,于是被迫代替她去往敵國和親坟漱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容