• .net mvc 扩展IPrincipal接口


     1 1.自定义实现IPrincipal接口的类
     2  interface ICustomPrincipal : IPrincipal
     3 {
     4     string Identifier { get; set; }
     5     string IdentityType { get; set; }
     6 }
     7 public class CustomPrincipal : ICustomPrincipal
     8 {
     9     public IIdentity Identity { get; private set; }
    10     public bool IsInRole(string role) { return false; }
    11     public CustomPrincipal()
    12     {
    13     }
    14     public CustomPrincipal(string identifer)
    15     {
    16         this.Identity = new GenericIdentity(identifer);
    17     }
    18 
    19     public  CustomPrincipal(IIdentity identity)
    20     {
    21         this.Identity = identity;
    22     }
    23 
    24     public string Identifier
    25     {
    26         get;
    27         set;
    28     }
    29 
    30     public string IdentityType
    31     {
    32         get;
    33         set;
    34     }
    35 }
    36 public class CustomPrincipalSerializeModel
    37 {
    38     public string Identifier { get; set; }
    39     public string IdentityType { get; set; }
    40 }
    41 2.登录成功,存储相关登录信息
    42 CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel();
    43 serializeModel.Identifier = model.Account;
    44 serializeModel.IdentityType = "email";
    45 
    46 JavaScriptSerializer serializer = new JavaScriptSerializer();
    47 
    48 string userData = serializer.Serialize(serializeModel);
    49 
    50 FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
    51          1,
    52          model.Account,
    53          DateTime.Now,
    54          DateTime.Now.AddMinutes(15),
    55          false,
    56          userData);
    57 
    58 string encTicket = FormsAuthentication.Encrypt(authTicket);
    59 HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
    60 Response.Cookies.Add(faCookie);
    61 3.在Global文件中注册Application_PostAuthenticateRequest事件
    62 protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
    63 {
    64     HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
    65 
    66     if (authCookie != null)
    67     {
    68         FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    69 
    70         JavaScriptSerializer serializer = new JavaScriptSerializer();
    71 
    72         CustomPrincipalSerializeModel serializeModel = serializer.Deserialize<CustomPrincipalSerializeModel>(authTicket.UserData);
    73 
    74         CustomPrincipal newUser = new CustomPrincipal(authTicket.Name);
    75         newUser.Identifier = serializeModel.Identifier;
    76         newUser.IdentityType = serializeModel.IdentityType;
    77 
    78         HttpContext.Current.User = newUser;
    79     }
    80  
    81 }
    82 4.在BaseController中获取登录相关信息
    83 protected virtual new CustomPrincipal User
    84 {
    85     get { return HttpContext.User as CustomPrincipal; }
    86 }
    87 5.方法中使用
    88 User.Identifier
  • 相关阅读:
    图的广度优先搜索
    图的深度遍历
    图的邻接表的实现
    求1+2!+3!+...+20!的和。
    CSS用户界面样式
    CSS三角
    CSS字体图标技术
    CSS精灵技术
    CSS元素的显示和隐藏
    CSS定位
  • 原文地址:https://www.cnblogs.com/CeleryCabbage/p/6204459.html
Copyright © 2020-2023  润新知