还是刘艺那笨书上的例子~~~~~~~~~~~~555555,以后再也不看刘艺的书了!!!无论是按书上的例子用数据库存放用户信息,还是直接使用WebUserList的UserItem属性设置用户密码权限,两个方法的效果都一样,不行!只要是设置了“Login Required”的页面,不管需要或不需要权限,都进不了,Login页面始终在那里停住
请高手襄助,谢谢!
请高手襄助,谢谢!
解决方案 »
- KBMMW使用中,更新中文的问题?
- 类型转换和拼SQL语句串
- 我的编程资源在线(www.delphi163.com)网站注册人数大增,高兴,散分,同时感谢CSDN的朋友
- 怎样把把程序放到右边的工具栏里面。诚等高手指教
- 在程序的主界面中如何实现重新登陆
- TDrawGrid问题
- ISAPI不能读网络映射盘的问题
- 请教adoquery.Parameters的正确用法
- 谁用了 delphi6.0 帮我看看 里面的 teechart是什么版本?谢了
- 如何利用Form的canvas属性在窗体上绘制文本?
- 我的delphi项目打开之后,会将我所有的文件全部打开了?????????
- 有没有最新的比较经典的delphi书,给小弟介绍一下好吗谢谢
改WebAdapt.pas单元的如下地方,其中用(**)注释的部分是原来的代码,之前是改后的代码。BTW,你不看刘艺的书不如看我的书吧:)procedure TLoginFormAdapterLoginAction.ImplExecuteActionRequest(
AActionRequest: IActionRequest; AActionResponse: IActionResponse);
var
UserID: Variant;
S: TStrings;
DefaultResponse: IGetAdapterRequestDefaultResponse;
begin
RedirectOptions := roRedirect;
if (Adapter <> nil) then
with Adapter do
begin
try
NextPage := GetAdapterRequestParamsIntf(AActionRequest).ValueOfParam(sNextPage);
if ( NextPage = '' ) // Only when no Next Page is defined
AND Supports(WebContext.AdapterRequest, IGetAdapterRequestDefaultResponse, DefaultResponse) then
NextPage := DefaultResponse.SuccessPage;
(*
if Supports(WebContext.AdapterRequest, IGetAdapterRequestDefaultResponse, DefaultResponse) then
NextPage := DefaultResponse.SuccessPage
else
NextPage := GetAdapterRequestParamsIntf(AActionRequest).ValueOfParam(sNextPage);
*)
unit Unit_WebModule_HrHome;......type
THrHome = class(TWebAppPageModule)
AdapterPageProducer: TAdapterPageProducer;
WebAppComponents: TWebAppComponents;
ApplicationAdapter: TApplicationAdapter;
PageDispatcher: TPageDispatcher;
AdapterDispatcher: TAdapterDispatcher;
EndUserSessionAdapter1: TEndUserSessionAdapter;
WebUserList1: TWebUserList;
SessionsService1: TSessionsService;
AdaptDisplayName: TAdapterEndUserDisplayNameField;
AdaptLoggedIn: TAdapterEndUserLoggedInField;
WebDispatcher1: TWebDispatcher;
adaptGrp: TAdapterField;
adaptName: TAdapterField;
procedure WebUserList1BeforeValidateUser(Strings: TStrings;
var UserID: Variant; var Handled: Boolean);
procedure adaptNameGetValue(Sender: TObject; var Value: Variant);
procedure adaptGrpGetValue(Sender: TObject; var Value: Variant);
procedure PageDispatcherCanViewPage(Sender: TObject;
const PageName: String; var CanView, AHandled: Boolean);
procedure WebAppComponentsBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); private
{ Private declarations }
public
FEmpId,FGrpId:string;
end; function HrHome: THrHome;implementation{$R *.dfm} {*.html}uses WebReq, WebCntxt, WebFact, Variants, Unit_DataModule_WDM;function HrHome: THrHome;
begin
Result := THrHome(WebContext.FindModuleClass(THrHome));
end;
{----------WebUserList1的OnBeforeValidateUser-----------------------}
procedure THrHome.WebUserList1BeforeValidateUser(Strings: TStrings; var UserID: Variant; var Handled: Boolean);//??这个事件到底作用是什么,在什么时候调用??var UserItem:TWebUserItem;
begin
//从basicinfo,enduser和usergroup表中联合查询出登录用户信息.
wdm.adqTmp.SQL.Clear;
wdm.adqTmp.SQL.Add('select b.Empid,a.name,b.password,b.groupid,c.grouptype ');
wdm.adqTmp.SQL.Add('from basicinfo a,enduser b,usergroup c ');
wdm.adqTmp.SQL.Add('where a.empid=b.empid and b.groupid=c.groupid and ');
wdm.adqTmp.SQL.Add('b.empid='+#39+Strings.Values['UserName']+#39);
wdm.adqTmp.SQL.Add(' and b.password='+#39+Strings.Values['Password']+#39);
wdm.adqTmp.Open;
//?这里我没弄明白,UserName和Password是哪来的?Strings.Values的作用是什么?? if wdm.adqTmp.RecordCount > 0 then
begin
UserID:=Strings.Values['UserName'];
//验证通过
{给UserItem的Username、Password、AccessRight赋值}
UserItem:=WebUserList1.UserItems.Add as TWebUserItem;
UserItem.UserName:=Strings.Values['UserName'];
UserItem.Password:=Strings.Values['Password'];;
UserItem.AccessRights:=wdm.adqTmp.FieldValues['groupid']; FEmpId:=Strings.Values['UserName']; //这里的两个变量用来干吗??
FGrpId:=wdm.adqTmp.FieldValues['groupid']; Session.Values['groupid']:=wdm.adqTmp.FieldValues['groupid'];
Session.Values['empid']:=wdm.adqTmp.FieldValues['empid'];
Session.Values['name']:=wdm.adqTmp.FieldValues['name'];
Session.Values['grp']:=wdm.adqTmp.FieldValues['grouptype']; Handled:=True; //让TWebUserList退出自动验证机制
end
else Handled:=False;
end;
procedure THrHome.adaptNameGetValue(Sender: TObject; var Value: Variant);
begin
if not VarIsEmpty(Session.Values['Name']) then
Value:=Session.Values['Name']
else Value:='';
end;procedure THrHome.adaptGrpGetValue(Sender: TObject; var Value: Variant);
begin
if not VarIsEmpty(Session.Values['grp']) then
Value:=Session.Values['grp']
else Value:='';
end;procedure THrHome.PageDispatcherCanViewPage(Sender: TObject;
const PageName: String; var CanView, AHandled: Boolean);
begin
if pageName='QryBasiInfo' then
if FGrpID<>'B2' then canview:=False;end;procedure THrHome.WebAppComponentsBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var i:integer;
begin
for i:=0 to webcontext.Response.Cookies.Count-1 do
begin
if SameText(webcontext.Response.Cookies.Items[i].Name,'WebBrokerSessionID') then
begin
if webcontext.Response.Cookies.Items[i].Expires=-1 then
webcontext.Response.Cookies.Items[i].Expires:=IncDay(Date);
end;
end;
end;initialization
if WebRequestHandler <> nil then
WebRequestHandler.AddWebModuleFactory(TWebAppPageModuleFactory.Create(THrHome, TWebPageInfo.Create([wpPublished {, wpLoginRequired}], '.html', '', '首页'), caCache));end.
Strings是参数,其内容来自LoginFormAdapter,其USERNAME/PASSWORD就是LoginFormAdapter中的相应Field。
也许他的数据库里EMPID记录的就是用户登录名吧。
剩下的障碍应该在这两个事件中,因为我没有他的全部程序,不清楚他在这里做的事是想干什么,你把这两个事件响应去掉再试试。
PageDispatcherCanViewPage
WebAppComponentsBeforeDispatch