使用 HttpModel与现有基于共享登录信息( Cookie )的网站进行集成

/****************************************************************************
 * 功能说明:
 *  1、使用 HttpModel与现有基于共享登录信息( Cookie )的网站进行集成
 *  2、用户自动登录,自动注册,,延时注册,
 *  3、同步退出
 * 
 * 使用方法:
 *  见示例web.config
 * 
 *  设计编码:shiningrise@gmail.com
 *  
****************************************************************************/

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Security;
using wojilu.Open;

namespace wojilu.AuthenticationModule
{
    public class AuthenticationModule : System.Web.IHttpModule
    {
        public void Dispose()
        {
            //         throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(Application_BeginRequest);
            context.EndRequest += new EventHandler(Application_EndRequest);
            context.AuthenticateRequest += new EventHandler(context_AuthenticateRequest);
        }

        void context_AuthenticateRequest(object sender, EventArgs e)
        {
            HttpApplication application = sender as HttpApplication;
            HttpContext context = application.Context;
            HttpRequest req = context.Request;

            //定义起来测试用
            HttpResponse response = context.Response;

            OpenService openService = new OpenService();
            if (req.IsAuthenticated)
            {
                if (openService.UserIsLogin(context) != true)
                {
                    string username = context.User.Identity.Name;
                    //        response.Write("username=" + username);

                    if (openService.UserIsRegister(username, context))
                    {
                        openService.UserLogin(username, context);
                        this.UpdateUserProfile(username);
                    }
                    else
                    {
                        string userPwd = GetRandomNumberString(16);
                        string userEmail = string.Format("{0}@lcsyzx.cn", username);
                        openService.UserRegister(username, userPwd, userEmail, null, "home,blog,photo,microblog,friend,visitor,forumpost,about,feedback,share");
                    }
                }
            }
            else
            {
                //       response.Write(" IsAuthenticated = false ");
                openService.UserLogout(context);
            }
        }

        public void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        public void Application_EndRequest(object sender, EventArgs e)
        {
            //HttpApplication application = sender as HttpApplication;
            //HttpContext context = application.Context;
            //HttpResponse response = context.Response;

            //    response.Write("这是来自自定义HttpModule中有EndRequest");
        }

        /// <summary>
        /// 更新 Profile 的真实名到 wojilu
        /// </summary>
        /// <param name="usr"></param>
        private void UpdateUserProfile(string username)
        {
            UserProfile userProfile = new UserProfile();//(UserProfile)ProfileBase.Create(usr.UserName, true);
            userProfile.Initialize(username, true);
            wojilu.Members.Users.Domain.User usr = new OpenService().getUserByName(username);
            //UserName  LoginUserName  FullName  UserGroup  CurJi  CurBh  CurBnbh
            if (userProfile.UserGroup == "学生")
                usr.RealName = string.Format("{0}({1})班{2}", userProfile.CurJi, userProfile.CurBh, userProfile.FullName);
            else if (userProfile.UserGroup == "教师")
                usr.RealName = userProfile.FullName;
            else
                usr.RealName = string.Format("{0}{1}", userProfile.UserGroup, userProfile.FullName);

            usr.Pwd = GetRandomNumberString(16);
            if (usr.Name != "admin")
                usr.update();
            //    db.update(usr, "RealName");
            //    db.update(usr, "Pwd");
        }

        /// <summary>
        /// 生成随机数字字符串
        /// </summary>
        /// <param name="int_NumberLength">数字长度</param>
        /// <returns></returns>
        private string GetRandomNumberString(int int_NumberLength)
        {
            bool onlyNumber = false;
            Random random = new Random();
            string strings = "123456789";
            if (!onlyNumber) strings += "abcdefghjkmnpqrstuvwxyz";
            char[] chars = strings.ToCharArray();
            string returnCode = string.Empty;
            for (int i = 0; i < int_NumberLength; i++)
                returnCode += chars[random.Next(0, chars.Length)].ToString();
            return returnCode;
        }
    }
}

posted @ 2013-01-11 21:38  shiningrise  阅读(374)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css