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

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义