LoadRunner 的 web_set_user 函数
不少使用IIS或是windows域的环境中,在访问某个页面时,系统会弹出一个对话框要求用户输入域用户名称和口令,输入正确的与用户名称和口令才能继续。在使用LoadRunner对这种类型的网站进行测试时,录制下来的脚本在回放时通常都会在访问特定页面时给出一个401 Authorized require的错误信息。
其实,在LoadRunner中,有一个专门的函数 web_set_user 可以实现输入windows认证信息。
web_set_user()函数带三个参数,分别是 域用户名、口令和需要登录的服务器名称和端口,第一个参数需要注意的是一定要带上域名,其格式为\\windomainname\username,而最容易混淆的莫过于第三个参数了。特别需要注意的是,第三个参数是“需要认证的服务器名:端口”,假设你要访问的web url 是 http://requireauth/login.asp,则第三个参数应该是“requireauth:80”,有些朋友错误的写成“http://requireauth:80”或是“requireauth/login.asp:80”,都是不正确的。
最后,知其然,知其所以然。web_set_user函数的原理并不复杂,简单的说,就是通过NTLM协议发送了一些数据包给服务器而已。关于NTLM的更详细的内容,提供两份参考文献:
http://www.innovation.ch/personal/ronald/ntlm.html
http://davenport.sourceforge.net/ntlm.html
About jCIFS
jCIFS是一个完全用Java开发的SMB客户端库。它紧密地遵循CIFS规范(是Microsoft Windows平台标准文件共享协议),支持Unicode,命令管道,批处理,线程化调用者的IO复用,加密认证,完整事务,域/工作组/主机/共享/文件枚举,NetBIOS 套接字和名称服务,smb:// URL协议处理器,一个类API的java.io.File ,RAP调用,NTLM HTTP鉴别。它广泛用于企业内部网络。
JCIFS: The Java CIFS Client Library
http://jcifs.samba.org/
很多公司都希望WEB登陆与域用户结合起来,实现单点登陆,使用jcifs.jar可以非常好实现,下载一个最新的jcifs.jar,放到WEB-INFlib下面,现在是1.27版,然后修改web.xml,加入下面:
<filter>
<filter-name>NtlmHttpFilter</filter-name>
<filter-class>jcifs.http.NtlmHttpFilter</filter-class>
<init-param>
<param-name>jcifs.http.domainController</param-name>
<param-value>192.168.0.90</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>NtlmHttpFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
192.168.0.90是你AD服务器,然后在你的登陆的代码中使用
request.getRemoteUser(),就可以得到当前域用户的用户名了
如何屏蔽sqlServer触发器
---
--禁用单个触发器:
ALTER TABLE trig_example DISABLE TRIGGER trig1
GO
--恢复单个触发器:
ALTER TABLE trig_example ENABLE TRIGGER trig1
GO
---
--禁用某个表上的所有触发器
ALTER TABLE 你的表 DISABLE TRIGGER all
--启用某个表上的所有触发器
ALTER TABLE 你的表 enable TRIGGER all
--禁用所有表上的所有触发器
exec sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER all'
--启用所有表上的所有触发器
exec sp_msforeachtable 'ALTER TABLE ? enable TRIGGER all'
使用同样的方式,可以禁用和恢复约束:
exec sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
exec sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
OpenSMTP中附件乱码的解决方法
在.Net1.1的时代,一般是使用OpenSMTP来发送邮件的,到了.Net 2.0,自带了SMTPClient类,一般用自带的SmtpClient来发送信件。
但.Net 2.0自带的SMTPClient有点问题,在SMTP登录时,将用户名直接跟在Auth Login后面(AUTH LOGIN USERNAME),有些SMTP服务器不支持这种认证,比如,21cn.com, tom.com的邮件服务器,使用.net 2.0自带的SMTPClient,即使用户名密码正确,也无法发送成功。
所以,某些情况下,还是需要使用OpenSMTP来发送邮件,OpenSMTP的不足是不支持SSL,所以给Gmail发信时,我一般采用SMTPClient,而给其它邮局发信时,我一般采用OpenSMTP
OpenSMTP的另外一个缺点就是,发送中文名的附件时,附名名乱码,出现这种情况的原因,是OpenSMTP未对附件的文件名进行合适的BASE64编码,以下是OpenSMTP的Attachment.cs里的ToMime函数的代码:
sb.Append("Content-Type: " + mimeType + ";\r\n");
sb.Append(" name=\"" + MailEncoder.ConvertToQP(name,null) + "\"\r\n");
sb.Append("Content-Transfer-Encoding: " + encoding + "\r\n");
sb.Append("Content-Disposition: attachment;\r\n");
sb.Append(" filename=\"" + MailEncoder.ConvertToQP(name,null) + "\"\r\n\r\n");
网上也有一些解决方法,不过大多是制标不制本,以下给出一种较合理的方案:
//Fixed by Admin.net(a)163.com
//Chinese Windows:Encoding.Default=GB2312
byte[] bFName = System.Text.Encoding.Default.GetBytes(name.ToCharArray());
string sFName = System.Convert.ToBase64String(bFName);
String fname = "=?" + System.Text.Encoding.Default.BodyName + "?B?" + sFName + "?=";
//Fixed by Admin.net(a)163.com
sb.Append("Content-Type: " + mimeType + ";\r\n");
sb.Append(" name=\"" + fname + "\"\r\n");
sb.Append("Content-Transfer-Encoding: " + encoding + "\r\n");
sb.Append("Content-Disposition: attachment;\r\n");
sb.Append(" filename=\"" + fname + "\"\r\n\r\n");
此方法适用于简体中文的Windows,也适用于其它所有的非英文Windows.