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.
Apahce+mod_jk+Tomcat的Loadbalancer配置
测试了一天,终于可以工作了,配置大致如下:
Apache2.2+moj_jk1.2+tomcat5.5.9
>>>>>>
如何将SQLServer的Table Name改为大写
在将SQLServer的数据迁移到Oracle时,常常会碰到一个这样的问题,SQLServer的表格名称是小写的,但Oracle默认是大写的,如果未做特别处理的话,SQLServer和tblIpaddr导到Oracle里变成了"tblIpaddr" (有引号,Oracle区别大小写,与TBLIPADDR有区别),所在,需要在迁移前,将SQLServer的所有表格名改为大写:
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
go
UPDATE sysobjects SET name=upper(name) WHERE type='U';
go
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
go
---------------------
以上方法只适合于SQLServer2000,SQLServer2005不允许直接更改系统表,以下SQL兼容2000和2005:
DECLARE @oldTName varchar(50)
DECLARE @newTName varchar(50)
--Author: ipaddr, 鱼漂
DECLARE tableList CURSOR FOR
SELECT name FROM sysobjects WHERE type='U' ORDER BY name
OPEN tableList
FETCH NEXT FROM tableList INTO @oldTName
WHILE @@FETCH_STATUS=0
BEGIN
SET @newTName=upper(@oldTName)
EXEC sp_rename @oldTName,@newTName
FETCH NEXT FROM tableList INTO @oldTName
END
CLOSE tableList
DEALLOCATE tableList
C#(dotNet 2.0)中读写配置文件
C#(dotNet 2.0)中读写配置文件
dotNet已推荐使用新的方法读写配置文件,假设配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DBPath" value="data.mdb" />
</appSettings>
</configuration>
首先,加入对System.configuration的引用(在资源管理器中,加入引用)
使用如下的方法读入配置:
using System.Configuration;
private Configuration config;
private AppSettingsSection appConfig;
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
appConfig = config.AppSettings;
MessageBox.Show(appConfig.Settings["DBPath"].Value);
在Windows下安装CVSNT
在Windows下安装CVSNT
1 首先从www.cvsnt.org下载CVS服务器软件,文件名为cvsnt-2.5.01.1976.msi,CVSNT需要使用NTFS的文件格式,所以确保CVSNT和库安装在NTFS上,然后将CVSNT的主目录下的bin目录添见到系统的path路径中。
2 CVSNT的设置。打开CVSNT Control Panel,点击“Server Settings”,这里我们需要设置一下“Run as”和“Default”,分别是运行CVSNT程序的用户和计算机名称,这里可以设置系统的administrator即可。
3 接下来我们需要设置CVS库,只需在设置面板中选择“Repositories”,然后创建相关的库即可。然后我们就可以通过 :pserver:username@localhost:/reposname去引用这个库。
4 设置库的权限。下面我们需要设置访问CVS库的用户信息,这里我们需要添加新的用户。在服务器端,设置一下CVSROOT,这里CVSROOT为库所在的目录,如d:\respository\cvs\respo1,然后执行cvs passwd命令即可,如下:
> cvs passwd –a –r administrator username
这样就添加了一个新的访问特定库的新用户。如果不设置CVSROOT,可以通过cvs –d d:\respository\cvs\respo1 直接访问库。关于cvs的passwd的命令,请参考 cvs passwd –help
5 创建CVS 库的管理员,只需将CVS的用户名称写如CVSROOT/admin文件中即可(一行一个用户名称,最后一个用户后添见一个空白行)。其他设置读取或写入权限,只需设置 readers 和 writers文件即可。
6 其他相关的设置,请参考CVS标准设置。
cd CVSROOT
cvs chown cvsadmin //更改所有者为cvsadmin
cvs chacl default:n //默认权限为n
cvs chacl cvsadmin:rwc //添加cvsadmin
cd CVSROOT
cvs chown cvsadmin
cvs chacl -u default -p n
cvs chacl -u cvsadmin -p rwc
用Reflector for .NET反编译dll文件(.net)
1.下载Reflector.FileDisassembler.zip,
Reflector.FileDisassembler.zip下载地址:
http://www.denisbauer.com/NETTools/FileDisassembler.aspx
解压后得到一些文件,其中Reflector.FileDisassembler.dll是已经编译好的,其它是它源码;
2.打开Reflector,在view菜单下的Add-Ins,将Reflector.FileDisassembler.dll添加到里面;
3.open一个dll,exe,或mcl为后缀的文件,当然要支持.net的
4.选择要反编译的dll(会在列表中显示),选择Tools->File Disassembler,在右窗口会出现设置存放源码位置的路径,点击产生就可以了!
>>>>>>>>>>>>>
唾手可得的宝藏:Mono源码
今天需要做一个上传文件的Web页面,在调用HttpPostedFile.SaveAs(String filename)方法将文件写到服务器磁盘上时,想到如果此文件已经存在于磁盘上,这个方法会如何处理呢?直接覆盖?抛出异常?
翻一下.NET Framework文档,可惜里面没有对这个情况进行说明。于是进入Mono源码目录,定位到HttpPostedFile.cs文件,用记事本打开,找到SaveAs(String filename)方法,第一句就是:
FileStream File = new FileStream(filename, FileMode.Create);
OK,确切答案就是如果已经存在同名文件会直接覆写。
我猜一定有人会想,“万一Mono的实现和.Net Framework不同怎么办?”其实我过后就这么想了,于是用Reflector打开了System.Web.dll,定位这个方法,呵呵,.Net Framework的实现也是“FileMode.Create”。不过.Net Framework使用了一个try...catch来保证关闭这个FileStream,而Mono的实现里面则没有,嗯,这是不是意味着Mono的稳定性仍有不少改进之处呢?>>>>>>>>>>>>>>>>
Load Balancing For Tomcat
要求支持Sticky Session功能,主要有以下几种方案:
>>