熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

使用HttpContext的User屬性來實現用戶驗證

2013-11-23 18:56:07  來源: Java核心技術 

  HttpContext類包含了個別HTTP請求的所有特定HTTP信息這個示例主要是講如何使用HttpContext類中的User屬性來實現用戶驗證!
  
  用戶驗證是大部分ASPNET WEB應用程序都要用到的它在整個應用程序中占有很重要的地位NET中包含了很多種用戶驗證方式如眾所周知的PassPort認證Windows認證Form認證等等可是這些都很難滿足我們在實際應用中的需求以致於很多朋友都是自己另外寫代碼來實現自己需要的功能這讓我們在安全性以及系統效率上要考慮很多
  
  實際上ASPNET中內置的用戶驗證機制功能非常強大同時也具有非常好的的可擴展性它能夠在HttpContext對象中生成一個名為User的屬性這個屬性能讓我們訪問各種信息包括用戶是否已驗證用戶的類型用戶名等等我們還可以對該屬性的功能進性擴展以實現我們的要求
  
  分配給HttpContextUser的對象必須實現IPrincipal接口而Iprincipal定義的屬性之一是Identity它必須實現Iidentity接口因為我們只要寫了實現這兩個接口的類就可以在這些類中添加任何我們所需要的功能
  
  首先我們創建兩個實現Iprincipal和Iidentity的類分另為MyIprincipal和MyIdentity
  
  MyIprincipalcs
  
  using System;
  
  using SystemCollections;
  
  namespace HttpContextUserEG
  
  {
  
  /// <summary>
  
  /// MyPrincipal 的摘要說明
  
  /// </summary>
  
  /// 實現IPrincipal接口
  
  public class MyPrincipal : SystemSecurityPrincipalIPrincipal
  
  {
  
  private SystemSecurityPrincipalIIdentity identity;
  
  private ArrayList roleList;
  
  public MyPrincipal(string userIDstring password)
  
  {
  
  //
  
  // TODO: 在此處添加構造函數邏輯
  
  //
  
  identity = new MyIdentity(userIDpassword);
  
  if(identityIsAuthenticated)
  
  {
  
  //如果通過驗證則獲取該用戶的Role這裡可以修改為從數據庫中
  
  //讀取指定用戶的Role並將其添加到Role中本例中直接為用戶添加一個Admin角色
  
  roleList = new ArrayList();
  
  roleListAdd(Admin);
  
  }
  
  else
  
  {
  
  // do nothing
  
  }
  
  }
  
  public ArrayList RoleList
  
  {
  
  get
  
  {
  
  return roleList;
  
  }
  
  }
  
  #region IPrincipal 成員
  
  public SystemSecurityPrincipalIIdentity Identity
  
  {
  
  get
  
  {
  
  // TODO: 添加 MyPrincipalIdentity getter 實現
  
  return identity;
  
  }
  
  set
  
  {
  
  identity = value;
  
  }
  
  }
  
  public bool IsInRole(string role)
  
  {
  
  // TODO: 添加 MyPrincipalIsInRole 實現
  
  return roleListContains(role);;
  
  }
  
  #endregion
  
  }
  
  }
  
  MyIdentitycs
  
  using System;
  
  namespace HttpContextUserEG
  
  {
  
  /// <summary>
  
  /// MyIdentity 的摘要說明
  
  /// </summary>
  
  /// 實現IIdentity接口
  
  public class MyIdentity : SystemSecurityPrincipalIIdentity
  
  {
  
  private string userID;
  
  private string password;
  
  public MyIdentity(string currentUserIDstring currentPassword)
  
  {
  
  //
  
  // TODO: 在此處添加構造函數邏輯
  
  //
  
  userID = currentUserID;
  
  password = currentPassword;
  
  }
  
  private bool CanPass()
  
  {
  
  //這裡朋友們可以根據自己的需要改為從數據庫中驗證用戶名和密碼
  
  //這裡為了方便我直接指定的字符串
  
  if(userID == yanlovesha && password == iloveshasha)
  
  {
  
  return true;
  
  }
  
  else
  
  {
  
  return false;
  
  }
  
  }
  
  public string Password
  
  {
  
  get
  
  {
  
  return password;
  
  }
  
  set
  
  {
  
  password = value;
  
  }
  
  }
  
  #region IIdentity 成員
  
  public bool IsAuthenticated
  
  {
  
  get
  
  {
  
  // TODO: 添加 MyIdentityIsAuthenticated getter 實現
  
  return CanPass();
  
  }
  
  }
  
  public string Name
  
  {
  
  get
  
  {
  
  // TODO: 添加 MyIdentityName getter 實現
  
  return userID;
  
  }
  
  }
  
  //這個屬性我們可以根據自己的需要來靈活使用在本例中沒有用到它
  
  public string AuthenticationType
  
  {
  
  get
  
  {
  
  // TODO: 添加 MyIdentityAuthenticationType getter 實現
  
  return null;
  
  }
  
  }
  
  #endregion
  
  }
  
  }
  
  在完成了這兩個類之後我們還要創建一個自己的Page類來配合我們的驗證這裡我們將其命名為MyPage繼承自Page類
  
  MyPagecs
  
  using System;
  
  using SystemCollections;
  
  namespace HttpContextUserEG
  
  {
  
  /// <summary>
  
  /// MyPage 的摘要說明
  
  /// </summary>
  
  /// 繼承自Page類
  
  public class MyPage : SystemWebUIPage
  
  {
  
  public MyPage()
  
  {
  
  //
  
  // TODO: 在此處添加構造函數邏輯
  
  //
  
  }
  
  protected override void OnInit(EventArgs e)
  
  {
  
  baseOnInit (e);
  
  thisLoad +=new EventHandler(MyPage_Load);
  
  }
  
  //在頁面加載的時候從緩存中提取用戶信息
  
  private void MyPage_Load(object sender SystemEventArgs e)
  
  {
  
  if(ContextUserIdentityIsAuthenticated)
  
  {
  
  if(ContextCache[UserMessage] != null)
  
  {
  
  Hashtable userMessage = (Hashtable)ContextCache[UserMessage];
  
  MyPrincipal principal = new MyPrincipal(userMessage[UserID]ToString()userMessage[UserPassword]ToString());
  
  ContextUser = principal;
  
  }
  
  }
  
  }
  
  }
  
  }
  
  下面就是我們的界面WebFormaspx和WebFormaspxcs
  
  WebFormaspx
  
  <%@ Page language=c# Codebehind=WebFormaspxcs AutoEventWireup=false Inherits=HttpContextUserEGWebForm %>
  
  <!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN >
  
  <HTML>
  
  <HEAD>
  
  <title>WebForm</title>
  
  <meta content=Microsoft Visual Studio NET name=GENERATOR>
  
  <meta content=C# name=CODE_LANGUAGE>
  
  <meta content=JavaScript name=vs_defaultClientScript>
  
  <meta content= name=vs_targetSchema>
  
  </HEAD>
  
  <body>
  
  <form id=Form method=post runat=server>
  
  <P><FONT face=宋體>用戶名:
  
  <asp:TextBox id=tbxUserID runat=server></asp:TextBox><BR>
  
  密 碼:
  
  <asp:TextBox id=tbxPassword runat=server TextMode=Password></asp:TextBox></FONT></P>
  
  <P><FONT face=宋體>
  
  <asp:Button id=btnLogin runat=server Text=登錄></asp:Button>
  
  <asp:Label id=lblLoginMessage runat=server></asp:Label></FONT></P>
  
  <
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26002.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.