zoukankan      html  css  js  c++  java
  • User管理 FormsAuthenticationTicket

     Global

    1    void Application_AuthenticateRequest(object sender, EventArgs e)
    2         {
    3             UserHelper.SetRoles();
    4         }

    Login:

     1    protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e)
     2         {   
     3            string username=LoginUser.UserName;
     4            string password=LoginUser.Password;
     5            bool IsRemember=LoginUser.RememberMeSet;
     6              
     7             if(UserHelper.IsDBAuthenticated(username,password))
     8             {  
     9                 string roles=UserHelper.GetDBRoles(username,password);
    10                 UserHelper.Login(username, IsRemember, roles);
    11             } 
    12             
    13         }

    Web.config

    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
        <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" 
                    decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" 
                    decryption="3DES" 
                    validation="SHA1"/>
        <authentication mode="Forms">
          <forms name="CURRENT_AUTH_Cookies_NAME"
                 loginUrl="~/Account/Login.aspx"
                 defaultUrl="~/About.aspx"             
                 timeout="100">
            <credentials passwordFormat="SHA1"></credentials>
          </forms>      
        </authentication>
      </system.web>
    </configuration>

    UserHelper类文件:

    UserHelper
      1 public class UserHelper
      2     {
      3         #region DB
      4         public static bool IsDBAuthenticated(string username, string password)
      5         {
      6             return true; //查询数据库
      7         }
      8 
      9         public static string GetDBRoles(string username, string password)
     10         {
     11             return "editor,admin";// 查询数据库
     12         }
     13         #endregion
     14 
     15         #region Tools
     16 
     17         public static bool IsLogin()
     18         {
     19             var user=HttpContext.Current.User;
     20             if (user==null || !user.Identity.IsAuthenticated 
     21                            || string.IsNullOrEmpty(user.Identity.Name))
     22             {
     23                 HttpContext.Current.Response.Redirect(FormsAuthentication.LoginUrl+"?ReturnUrl="
     24                                                                 + HttpContext.Current.Request.Url);
     25                 return false;
     26             }
     27             return true;
     28         } 
     29 
     30         public static bool InRole(string role)
     31         {
     32             var user=HttpContext.Current.User;
     33             if (user!=null && user.Identity.IsAuthenticated && user.Identity is FormsIdentity)
     34             {
     35                 return user.IsInRole(role);
     36             }
     37             return false;
     38         }
     39 
     40         //一般由于Global::Application_AuthenticateRequest()
     41         public static void SetRoles()
     42         {
     43             var user=HttpContext.Current.User;
     44             if (user!=null && user.Identity.IsAuthenticated && user.Identity is FormsIdentity)
     45             {
     46                 FormsIdentity id=user.Identity as FormsIdentity;
     47                 FormsAuthenticationTicket ticket=id.Ticket;
     48                 string userData=ticket.UserData;              
     49 
     50                 // FormsAuthenticationTicket ticket2 = new FormsAuthenticationTicket(2, ticket.Name,
     51                 //                                      DateTime.Now, ticket.Expiration, false, userData);
     52                 // SetTicket(ticket2,ticket.Expiration);
     53                 string[] roles=userData.Split(',');
     54                 HttpContext.Current.User=new GenericPrincipal(id, roles);                
     55             }
     56         }
     57       
     58         public static FormsAuthenticationTicket GetTicket()
     59         {
     60             //添加下列代码以从窗体身份验证 cookie 中提取和解密身份验证票。
     61             string cookieName = FormsAuthentication.FormsCookieName;
     62             HttpCookie authCookie = HttpContext.Current.Request.Cookies[cookieName];
     63             if (authCookie==null)
     64                 return null;
     65             FormsAuthenticationTicket authTicket = null;
     66             try
     67             {
     68                 authTicket = FormsAuthentication.Decrypt(authCookie.Value);
     69             }
     70             catch (Exception ex)
     71             {
     72                 // Log exception details (omitted for simplicity)
     73                 return null;
     74             }
     75 
     76             return authTicket;
     77         }
     78 
     79         public static void SetTicket(FormsAuthenticationTicket ticket, DateTime endtime)
     80         {
     81             var hashString = FormsAuthentication.Encrypt(ticket);
     82             HttpCookie cookie=new HttpCookie(FormsAuthentication.FormsCookieName, hashString);
     83             cookie.Expires=endtime;
     84            
     85             if(HttpContext.Current.Request.Cookies.AllKeys.Contains(FormsAuthentication.FormsCookieName))
     86                  HttpContext.Current.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
     87             HttpContext.Current.Response.Cookies.Add(cookie);
     88         }
     89         #endregion
     90 
     91         #region Login Logout
     92         public static void Login(string UserName,bool IsRemember,string  roles)
     93         {
     94 
     95             DateTime now=DateTime.Now;
     96             DateTime endtime=now.AddMinutes(30);
     97             if (IsRemember)
     98                 endtime=now.AddYears(1);
     99          
    100             FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,UserName,
    101                                                                   now, endtime, false, roles);
    102             SetTicket(ticket, endtime);
    103             // FormsAuthentication.RedirectFromLoginPage(UserName,IsRemember);
    104            HttpContext.Current.Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName,IsRemember));
    105          
    106         }
    107         
    108         public static void Logout()
    109         {
    110             FormsAuthentication.SignOut();
    111             FormsAuthentication.RedirectToLoginPage();
    112         }
    113         #endregion
    114     }

    AdminAbout:

     1  public partial class AdminAbout : System.Web.UI.Page
     2     {
     3         protected void Page_Load(object sender, EventArgs e)
     4         {
     5 
     6             if (UserHelper.IsLogin())
     7             {
     8                 if (!UserHelper.InRole("admin"))                
     9                 {
    10                     UserHelper.Logout();
    11                     Response.Redirect("~/Account/Login.aspx?ReturnUrl="+Request.Url);
    12                 }
    13 
    14             }
    15             
    16         }
    17     }

     

  • 相关阅读:
    java 日志框架的选择Log4j->SLF4j->Logback
    linux上的常用命令
    Zookeeper配置Kafka
    分布式日志收集框架Flume
    Spark Streaming简介
    Spring Cloud学习笔记之微服务架构
    IntelliJ IDEA学习记录
    firefox插件-自动化测试工具-selenium IDE
    大数据01
    使用java开发spark的wordcount程序(多种实现)
  • 原文地址:https://www.cnblogs.com/AspDotNetMVC/p/2773241.html
Copyright © 2011-2022 走看看