web方式自定义登陆的问题

michael_monkey 2007-07-27 10:31:24
首先我检讨一下,我是公司OA管理员,但是我对DOMINO、LOTUS(、)NOTES一窍不通,甚至不知道这三者(两者?)的关系。

版本是6.5,B/S结构

现在我想自己定义登陆脚本,做一些例外的权限检查,主要是控制外网的访问OA的权限,设想如下:

step1:在服务器上建立一个文本文件或者其它类型的文件exUser,里面包含允许外网访问的用户名,需要经常维护的。
step2:在自定义登陆脚本中检查exUser和IP地址:如果客户端IP是内网地址(192.168.X.X),则让其正常登陆;如果是外网地址,则检查输入的用户名是否在exUser中,如果存在,表示允许从外网访问,让其登陆,如果不存在,则禁止登陆。


我不能解决的:
1、压根儿不知道登陆脚本在哪儿,甚至不知道是否能改登陆脚本!!
2、不知道exuser怎么处理,如果是文本文件,在脚本中如何读取?
3、不知道怎么取客户端IP。

登陆页面在客户端反应如下(去掉了不必要的代码):
……
<form method="post" action="/names.nsf?Login" name="_DominoForm">
<input type="hidden" name="%%ModDate" value="0066E40400000000"><HTML>
用户名<input name="Username" value=""><br>
密码<input name="Password" value="" type="password"><br>
<img style="cursor:hand" src="/jsoa/images/button-go.gif" onclick="javascript:document.forms['0'].submit()">
<input type="submit" value="">
</form>
……

另外在服务器端用designer,打开了“系统登陆”的$$loginuserform,发现里头还有redirectTo,PublicAccess,ReasonType三个域

可能要问为什么不找OA实施商,因为那个人说他不会!还问我一大堆这样做的理由!!!我烦他!
...全文
470 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
killer_wo 2007-08-27
  • 打赏
  • 举报
回复
记下一下,一会儿看,:)
jinlianshuang 2007-08-26
  • 打赏
  • 举报
回复
刚做过一个,也是用户提出来的.

思路是: 表单onsubmit中进行处理,没权的用户根本不让它提交.

有问师再说.
yaoxiaoj 2007-08-12
  • 打赏
  • 举报
回复
redirectTo:这个域记录登录人员是从什么地方到达登录表单的,以便在登录后返回到那个表单。权限控制良好的OA,不应该在用户操作的过程中出现登录界面的,所以,一般是从OA的主页数据库到达登录表单的。这说明,主页数据库肯定禁止了Anonymous匿名用户的访问,也就是说,在主页的数据库中,有Anonymous这个用户,并且是不可访问者权限。

再,redirectTo域的内容是可以通过此表单的打开代理或者通过onload事件的JS函数进行修改的。如果要用客户端JS函数修改,你必须保证这个域能返回到客户端,不能加WEB隐藏,把它HIDDEN掉就可以了。

PublicAccess:这个域在这个表单必须存在,指必须是1,以保证匿名用户可以访问这个数据库的表单,也就是说,可以使用此表单来创建文档。

ReasonType:这个是登录不成功的原因,用数字标识的。

0:提示输入用户名和密码,默认值
1:没有足够的权限访问数据库
2:无效的用户名或密码
3:连接过期
timlq 2007-08-12
  • 打赏
  • 举报
回复
Mark
bannageda1 2007-08-07
  • 打赏
  • 举报
回复
关注1
michael_monkey 2007-08-06
  • 打赏
  • 举报
回复
aluzi(aluzi) 你有qq号码吗?有些问题请教
aluzi 2007-08-05
  • 打赏
  • 举报
回复
你为何
strncpy ((char *)authData->authName, authData->userName, authData->authNameSize);
authData->authType = kNotAuthentic;
return kFilterHandledEvent;

要写kNotAuthentic?这样等于不让通过。
而且经过验证的全称你也没有获得啊?
必须是全称,例如CN=username/O=cert
michael_monkey 2007-08-03
  • 打赏
  • 举报
回复
写了代码,初步成功,在首页提交时通过javascript使用户名成为 用户名,IP地址 的形式,然后在dsapi中还原用户名,存在的问题是用户在许可范围中,lotus还是验证失败,见//××××××××××××××××××处的代码

unsigned int HttpFilterProc(FilterContext* pContext, unsigned int eventType, void* pEventData) {

char *IP = NULL;
/* kFilterAuthenticate事件所对应的结构类型为FilterAuthenticate,详见例程后说明 */
FilterAuthenticate* authData = NULL;
/* 判断事件是否是过滤器所支持的。在函数FilterInit()中,
* 我们声明了过滤器支持的事件类型为kFilterAuthenticate。 */
if (eventType != kFilterAuthenticate)
return kFilterNotHandled;
/* 根据事件类型,把pEventData转化成对应的数据结构 */
authData = (FilterAuthenticate*)pEventData;
/* authData->foundInCache为TRUE时,表明用户已经在Domino内部的cache中发现。
* 如果过滤器不处理,直接返回kFilterNotHandled,Domino服务器就会基于cache中的信息对用户进行认证 */
if (!authData || authData->foundInCache)
return kFilterNotHandled;

/* 验证用户是否合法 */
if (authData->userName && authData->password) {
char *UserNameIP = NULL;
UserNameIP = (char *)authData->userName;
IP = strchr(UserNameIP,',');
if (IP == NULL) {
return kFilterNotHandled;
}
IP++;
if (0 == strcmp(IP,"192.168.0.1")) {//外网用户
UserNameIP[IP-UserNameIP-1] = '\0';//修复用户名去除IP地址
if (0 == JudgeUserName(pContext,UserNameIP)) {//判断登陆用户是否在许可范围中
return kFilterNotHandled; //××××××××××××××××××。
}
else {
/* 把用户名复制到authName中,这是DSAPI所要求的格式 */
strncpy ((char *)authData->authName, authData->userName, authData->authNameSize);
authData->authType = kNotAuthentic;
return kFilterHandledEvent;
}
}
else {
UserNameIP[IP-UserNameIP-1] = '\0';//修复用户名去除IP地址
return kFilterNotHandled;
}
}
return kFilterNotHandled;
}
michael_monkey 2007-07-30
  • 打赏
  • 举报
回复
http://www.ibm.com/developerworks/cn/lotus/ls-dsapi/
利用 DSAPI 为 Domino Web 用户定制用户名和口令认证

看起来正是我想要的,研究研究先
michael_monkey 2007-07-30
  • 打赏
  • 举报
回复
黑黑:你真是善解人意,前面两个都没有理解我的意思,好人做到底,能不能告诉我如何取客户端IP,如何写dsapi,dsapi在哪儿?
whtportland 2007-07-27
  • 打赏
  • 举报
回复
人员不在Names库里,是不可能让他登录的,Lotus的权限控制很严格的。
kcw 2007-07-27
  • 打赏
  • 举报
回复
step1: 改 $$loginuserform 表单 ,就可以实现ip判断, 建个名称为Remote_Addr的域就可取到客户端ip;
step2: 过滤用户,要写dsapi,也就是你说的"登陆脚本",或者蹩脚但是简单点的方法,在首页把非外网用户再logout

step3: 从行文来看你果然没什么domino基础,建议你还是算了,不要和集成商斗气自找麻烦了;
figaro 2007-07-27
  • 打赏
  • 举报
回复
如果要从什么是Domino,什么是Notes讲起话就长了,LZ可以自己看帮助或者IBM官网的介绍。至于注册用户,你只要在通讯录里建一些用户的文档,给他们权限即可,而对匿名用户(Anonymous)设置不能访问即可。

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧