Project Web Access 2007自定义FORM验证登录实现 zt

2024-04-15 13:32

本文主要是介绍Project Web Access 2007自定义FORM验证登录实现 zt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

Project Server 2007安装后生成的WEB管理网站Project Web Access默认采用Windows验证,并自动将安装时登录系统的计算机管理员指定为Project Web Access的超级管理员,默认端口为80。若安装PWA的计算机机器名为PWAServer, 则可以通过http://PWAServer:80来访问PWA。目前情况是PWA需要在非域环境下使用,用户账户和密码需要使用已有系统用户数据库中的用户名和密码,实现PWA登录用户与已有系统用户的统一管理。

经过阅读资料了解到PWA支持FORM验证机制(事实上是SharePoint Server 3.0支持Windows验证和Form验证,而PWA是基于SharePoint Server 3.0实现的一个SPS网站),该验证机制基于微软的Membership用户管理与登录框架,微软已提供了一个默认的实现,称为SqlMembershipProvider, 通过简单地修改PWAweb.config,并运行几个配置程序,就可以让PWA支持FORM验证(配置过程网上有很多文章讲到)。微软默认实现的缺点是登录用户的用户名和密码信息必须存储在微软默认生成的SQL Server数据库中,而不能自定义存储位置,这显然不能满足之前的要求。

微软的默认实现不能支持用户名密码的自定义存储,看来只有重新实现一个MembershipProvider。后来经过查阅Membership SDK和相关的SPS资料,通过开发自己的MembershipProvider,结合SharePoint Server的配置,最终实现了PWAFORM验证和自定义的用户来源。具体步骤如下:

一、配置Form Authentication Based PWA网站

要让PWA支持FORM登录,SharePoint Server的做法是生成与原网站一摸一样的一套网站,更改新网站的验证方式为允许匿名登录和FORM登录,新网站和原网站页面相同,访问的内容数据库也相同,只是配置的登录模式不同,从而实现同一个PWA,两种登录模式。下面是PWA Form验证网站的配置过程:

1. 进入Share Point 管理中心网站,进入"应用程序管理",点击"SharePoint Web 应用程序管理"下的"创建或扩展WEB应用程序",选择"扩展现有WEB应用程序",进入扩展页面。

2. 界面中首先选择要扩展的Web应用程序,在这里我选择"Share Point – 80"网站,对应的访问链接是http://PWAServer:80

3. 选择新建IIS网站,端口填任意未使用的端口,也可以用默认提供的端口。这里我们选择填81

4. 验证程序选择NTLM,选择允许匿名访问,安全套接字选择否。

5. URL此时自动变成了http://PWAServer:81, 区域选择Internet,确定并保存。

6. 进入"应用程序管理",进入"应用程序安全性"下的"验证提供程序";区域选择"Internet",进入。

7. 验证类型选择"表单",勾选启用匿名访问;

8. 成员身份提供程序名称填配置文件中配置的MembershipProvider名,此处我们填CIMCMember(也可以是其他名称)

9. 角色管理器名称留空。

10. 点击保存按钮保存。

至此我们完成了PWA Form验证网站http://PWAServer:81的配置,但该网站到目前为止还不能访问,还需要为它开发MembershipProvider适配器,将我们自定义的用户名密码数据库同PWA连接起来。下一步我们来做这个事情。

二、开发MemberShipProvider适配器

微软的Membership框架基于接口和面向对象设计,扩展Membership Provider首先需要继承虚基类System.Web.Security.MembershipProviderMembershipProvider实现了若干公共方法、同时也定义了若干虚方法,需要子类来实现它。这些方法主要完成从用户库增删改查用户信息、用户密码信息、验证登陆用户、用户锁定和找回密码等功能。对于PWAForm登录,最终只调用到适配器的一个方法,即


//
//
摘要:
//
验证数据源中是否存在指定的用户名和密码。
//
//
参数:
// username:
//
要验证的用户的名称。
//
// password:
//
指定的用户的密码。
//
//
返回结果:
//
如果指定的用户名和密码有效,则为 true;否则为 false
public abstract bool ValidateUser(string username, string password);

这个方法接收登录用户输入的用户名和密码,返回是否成功登陆的布尔值。很显然,我们只要在这个函数中写自己的验证逻辑,从自己的用户数据库中检索用户名和密码就可以实现登录用户名和密码的对接。具体实现略。

在实现自定义MembershipProvider的过程中,还可以对某些属性进行重载,以控制Membership的某些细节功能,例如:

Int MinRequiredPasswordLength 控制最小输入密码长度,可根据实际情况返回长度

bool EnablePasswordReset 是否允许重置密码。如果返回值为true的话,还需要重载相关重置密码的函数。

bool EnablePasswordRetrieval 是否允许用户找回密码。如果返回值为true的话,还需要重载相关找回密码的函数。

对于其他用不到的方法和属性,直接throw new Exception("The method or operation is not implemented.");

三、配置文件修改

自定义MembershipProvider开发好后,需要配置到PWA中才能使用,以下是配置步骤:

1. 将自定义MembershipProvider编译后形成的dll,连同该dll依赖的其他dll一起,拷贝到http://PWAServer:81网站的bin目录中(默认是C:\Inetpub\wwwroot\wss\VirtualDirectories\81\bin)。

2. 修改http://PWAServer:81网站的web.config文件加入以下配置信息:

<system.web>节中增加红色部分,代码安全策略配置节

<securityPolicy>
<trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_mediumtrust.config" />
<trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_minimaltrust.config" />
<!--
自定义安全级别-->
<trustLevel name="Full" policyFile="internal"/>
</securityPolicy>

<system.web>节中的trust安全策略节替换成红色部分

<!--<trust level="WSS_Minimal" originUrl="" />-->
<trust level="Full" originUrl="" />

以上两个节修改了PWA的代码加载安全策略,保证了PWA能正常加载我们开发的代码。

<system.web>节中增加自定义MembershipProvider配置节:

<!--自定义membership配置节-->
<membership defaultProvider="CIMCMember">
<providers>
<add name="CIMCMember" type="Hnas.Net2.PWAExtention.Membership.ImpMembershipProvider, Hnas.Net2.PWAExtention.Membership" portalAppName="CIMCPortal" />
</providers>
</membership>

注意:本节中的配置的Provider nameCIMCMember,必须与第一节中"验证提供程序"配置中指定的成员身份提供程序名称相同,PWA通过此名称来查找和加载MembershipProvider

3. web.config配置文件添加MembershipProvider依赖的其他配置信息,例如访问数据库时用到的数据库访问框架配置信息,连接字符串配置等。此处添加的是我公司自己的数据库访问框架配置信息

<section name="hnas.databaseSettings" type="Hnas.Application.Data.Configuration.DatabaseSettingsSection, Hnas.Application.Data, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />

<!--数据库连接字符串-->
<hnas.databaseSettings>
<add name="IMPPortalServerDB" type="Hnas.Application.Data.SqlClient.SqlDatabase, Hnas.Application.Data, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" connectionString="data source=10.2.57.64\cimcbase;user=user;pwd=hnas_95071000;database=PortalServer" />
</hnas.databaseSettings>

4. 重复以上三步,将dll和配置信息同时添加到http://PWAServer:80网站的目录和配置文件中去。

四、Form登录用户添加

windows验证环境下添加PWA访问用户相同,只有在PWA中建立了相应的用户映射,对应的来自自定义用户库的账号才能够登录PWA。添加PWA FORM验证用户的过程如下:

1. 访问windows验证版本的PWA( http://PWAServer:80/pwa)

2. 进入服务器设置->管理用户,选择新建用户。

3. 勾选"可将用户作为资源分配",可以让添加的用户直接成为PWA企业资源;

4. 填写显示名称,邮件等基本信息;

5. 用户身份验证选择"使用完全限定成员身份提供程序用户名(MembershipProvider:UserAccount)进行 Forms 身份验证",用户登录账户填写的格式为MembershipProvider:UserAccount, MembershipProvider为配置文件中配置的成员身份提供程序名称,UserAccount为自定义用户数据库中的登录账号。此处我们的项目中填的是CIMCMember:youxin

6. 填写其他非必填内容,勾选权限选项,为用户指定PWA使用权限。勾选的时候还可以使用"使用模版设置权限"功能,快速选择预定义角色包含的权限范围;

7. 点击"保存"创建用户。

至此,我们已经创建了名为CIMCMember:youxinFORM登录用户,该用户与我们自定义用户库中的账号youxin相关联。

当我们访问PWA FORM验证网站http://PWAServer:81/pwa下的任意页面时,系统会首先转到登录页面,要求输入用户名和密码。此时输入的用户名只能使用注册用户时输入的用户账号的后半部分,即注册时用的是CIMCMember:youxin,登录时应使用youxin

   

从 <http://www.cnblogs.com/yxin1322/archive/2009/08/26/pwa_formbasedsite_impl.html> 插入

这篇关于Project Web Access 2007自定义FORM验证登录实现 zt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/905951

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推