Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61557
  • 博文数量: 19
  • 博客积分: 1515
  • 博客等级: 上尉
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-20 19:06
文章分类
文章存档

2010年(10)

2009年(9)

我的朋友

分类: C/C++

2010-06-26 16:13:51

基于MXRT的CGI开发,简化,集成
根据配置文件初始化多个服务器
1. LDAP,实现用户登陆信息的统一
2. 数据库(现已实现PostgreSQL、SQLite、OracleEX的适配)
采用XML/XSLT实现多种终端的适配,至少现在已在实现B/S模式,同时支持简单的C/S模式和手机客户端(分别是MUIP_WS和MUIP_WS_mobile)
MUIP_WS基于wxWidgets开发,同时支持Windows和Linux系统,同时在Linux系统上采用了动态库导入技术,避免了*nix环境的DLL地狱

习惯了C++开发,并不会比PHP复杂
个人的体会:一切的复杂来自于基础库的缺失

以下的代码来自于的登陆模块
// Author: zhufei
// Mail:   zhufei@wawton.com
// MSN:    zhufei@wawton.com

#include "muip/session.h"

#include "muip/ldap.h"
#include "openssl/aes.h"
#include "mxrt/base64.h"
#include "mxrt/xml_doc.h"
#include "mxrt/xml_node.h"
#include "mxrt/dbtool.h"

int32_t    ShowSSOLoginPage();

int main( int argc, char* argv[] )
{
    int32_t    nRet    =    MXRT_SUCCESS;

    for ( int32_t iOnce = 0; iOnce < 1; ++ iOnce )
    {
        // 初始化Session
        nRet    =    MUIPSession::Instance()->Init( "conf/muip.conf.xml", true );
        if ( nRet != MXRT_SUCCESS )
        {
            MUIP::ErrorDebug( "sso_login", nRet, "config file error", "Home", "/cgi-bin/index.cgi" );
            break;
        }

        // 检查Cookie,并依此进行用户状态判断
        if ( ! MUIPSession::Instance()->IsLogon() )    // 没有登陆
        {
            // 获取用户名/密码数据,如果没有,显示登陆页面
            //TODO
            //ShowSSOLoginPage();

            // 采用LDAP进行用户认证
            MUIPLdap::UserInfo    userInfo;
            nRet    =    MUIPLdap::AuthUser( strUsername, strPassword, userInfo );
            if ( nRet != MXRT_SUCCESS )
            {
                MUIP::ErrorDebug( "sso_login", nRet, "invalid username or password", "login page", "/cgi-bin/sso_login.cgi" );
                break;
            }

            // 创建Session数据
            //TODO

            // 从数据库获取用户数据
            std::string    strUserRank;
            char        bufStmt[MXRT_DFT_BUF_SIZE];
            int            lenStmt    =    0;
            MRecordSet    recordSet;
            lenStmt    =    ::snprintf( bufStmt, sizeof(bufStmt),
                                    "SELECT usr_rank FROM tbl_usr WHERE usr_id=%lld",
                                    userInfo.llnUID
                                    );
            MDBTool::Instance()->Query( bufStmt, lenStmt, &recordSet );
            if ( recordSet.GetRows() > 0 )
            {
                strUserRank.assign( recordSet.GetData(0,0) );
            }
            else
            {
                strUserRank.assign( MCommon::Itoa(MUIP_USER_RANK_GUEST) );
            }

            // 设置Session数据
            //TODO

            MCGI::Instance()->OutputCookies();
            MUIP::RedirectTo( "/cgi-bin/index.cgi" );
        }

        nRet    =    MXRT_SUCCESS;
    }

    MUIPSession::Destroy();

    return nRet;
}

int ShowSSOLoginPage()
{
    //显示用户登陆页面

    return MXRT_SUCCESS;
}


阅读(7998) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~