Tomcat中的Realm

Realm其实就是一个存放用户名,密码及角色的一个“数据库”。
Tomcat中的Realm有下面几种,你也可以使用自己的Realm,只要实现org.apache.catalina.Realm就可以了。

1.JDBCRealm
授权信息存在关系数据库中, 通过JDBC驱动访问
数据库中必须至少有两张表,表示用户及角色
用户表必须至少有两个字段,用户名及密码
角色表必须至少有两个字段,用户名及角色

create table users (
  user_name         varchar(15) not null primary key,
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key (user_name, role_name)
);
<Realm className="org.apache.catalina.realm.JDBCRealm"
  driverName="org.gjt.mm.mysql.Driver"
  connectionURL="jdbc:mysql://localhost/authority?user=dbuser&amp;password=dbpass"
  userTable="users" userNameCol="user_name" userCredCol="user_pass"
  userRoleTable="user_roles" roleNameCol="role_name"/>

2.DataSourceRealm
授权信息存在关系数据库中, 通过JNDI JDBC数据源访问
数据库中必须至少有两张表,表示用户及角色
用户表必须至少有两个字段,用户名及密码
角色表必须至少有两个字段,用户名及角色

create table users (
  user_name         varchar(15) not null primary key,
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key (user_name, role_name)
);
<Realm className="org.apache.catalina.realm.DataSourceRealm"
  dataSourceName="jdbc/authority"
  userTable="users" userNameCol="user_name" userCredCol="user_pass"
  userRoleTable="user_roles" roleNameCol="role_name"/>

3.JNDIRealm
授权信息存在LDAP目录服务器中,通过JNDI提供者访问

<Realm className="org.apache.catalina.realm.JNDIRealm"
  connectionName="cn=Manager,dc=mycompany,dc=com"
  connectionPassword="secret"
  connectionURL="ldap://localhost:389"
  userPassword="userPassword"
  userPattern="uid={0},ou=people,dc=mycompany,dc=com"
  roleBase="ou=groups,dc=mycompany,dc=com"
  roleName="cn"
  roleSearch="(uniqueMember={0})"
/>

4.UserDatabaseRealm
默认配置,只是用于少量用户
授权信息存在用户数据JNDI资源中,该资源通常是一个XML文档 (conf/tomcat-users.xml)

<tomcat-users>
  <user name="tomcat" password="tomcat" roles="tomcat" />
  <user name="role1"  password="tomcat" roles="role1"  />
  <user name="both"   password="tomcat" roles="tomcat,role1" />
</tomcat-users>

5.MemoryRealm
授权信息存在内存中的对象集合中,该对象集合来自XML文档 (conf/tomcat-users.xml).
仅用于测试。

6.JAASRealm
通过JAAS框架访问授权信息,最灵活最开放的一种授权方式。
如果前面几种方式满足不了你的需求,可以先试试这种方式。

<Realm className="org.apache.catalina.realm.JAASRealm"
  appName="MyFooRealm"
  userClassNames="org.foobar.realm.FooUser"
  roleClassNames="org.foobar.realm.FooRole"/>

7.CombinedRealm
采用多种方式授权。

<Realm className="org.apache.catalina.realm.CombinedRealm" >
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    resourceName="UserDatabase"/>
  <Realm className="org.apache.catalina.realm.DataSourceRealm"
    dataSourceName="jdbc/authority"
    userTable="users" userNameCol="user_name" userCredCol="user_pass"
    userRoleTable="user_roles" roleNameCol="role_name"/>
</Realm>

8.LockOutRealm
多次登录失败后,锁定用户

<Realm className="org.apache.catalina.realm.LockOutRealm" >
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    resourceName="UserDatabase"/>
</Realm>

最后,如果你需要加密密码,那么需要只需要在Realm配置中指定所用的摘要算法就可以了

digest="MD5"
digest="SHA"

参考文章

Mac上安装Wine

Wine可以模拟Windows中的dll调用,从而使Windows程序可以运行在非BSD/UNIX/Linux平台上

1.安装XCode

2.安装MacPorts

3.配置MacPorts
依次执行下面的命令,需要admin授权
配置MacPorts路径

echo export PATH=/opt/local/bin:/opt/local/sbin:\$PATH$'\n'export MANPATH=/opt/local/man:\$MANPATH | sudo tee -a /etc/profile

配置cpu位数

if [ `sysctl -n hw.cpu64bit_capable` -eq 1 ] ; then echo "+universal" | sudo tee -a /opt/local/etc/macports/variants.conf; else echo "not 64bit capable"; fi

4.下载并编译wine

sudo port install wine

5.wine中安装软件

wine $INSTALLER.exe

或者是拷贝exe文件到wine下,但你要自己保证dll文件都在哟
wine的默认目录为

cd ~/.wine/drive_c

6.运行wine中软件

cd ~/.wine/drive_c/Program\ Files/
wine $PROGRAM.exe

7.增加桌面图标
在附件中找到AppleScript编辑器,把下面的东西粘进去

tell application "Terminal"
    do script "/opt/local/bin/wine ~/.wine/drive_c/Program\\ Files/$PATH_TO_PROGRAM.exe"
end tell

编译并运行试一下,如果可以的话,另存为Application
将其拖拽到Dock上就可以啦:)

8.更新Wine

sudo port selfupdate && sudo port upgrade outdated

9.卸载Wine

sudo port uninstall wine
sudo rm -rf /opt ~/.wine /Applications/MacPorts

如果我写的不够仔细,请参考下面的文章:
Installing Wine on Mac OS X

MyEclipse不更新JSP

为了测试系统中的一个小功能,我很开心的修改了系统时间
然后,我发现,无论我怎么修改JSP,在Tomcat中浏览就是没有任何效果,整个一大悲剧啊

于是,我纠结了整整一下午,最后,想起来修改了系统时间
文件修改时间比修改前的还要早,当然不会去刷新啦,唉,悲剧。

将系统时间调好,删掉Tomcat下编译好的JSP目录
系统就正常啦

面壁去了~~

CDatabase中Open与OpenEx

昨天帮同事调试一段Windows服务代码,
其实很简单,但诡异的是,在服务中一直无法Catch到数据库无法连接的错误。

一开始,我以为他没有加载资源,少了:

AfxSetResourceHandle(GetModuleHandle(NULL));

这句话

后来发现,错误根本无法catch到,运行后直接向死了一样,等了几分钟还是这样
后来仔细看了下代码

db.OpenEx(szConnect);

天啊
直接换成

db.Open(szConnect);

问题解决。

Service里弹什么对话框啊,晕。

修复Windows系统

我们在平时操作电脑的过程中可能会因为某个误操作而丢失了一些重要的系统文件,系统因此变得非常不稳定,总是出现错误提示
,如果是为此而重新安装系统的话,那必将浪费你好长的时间,其实使用SFC文件检测器命令就可以轻松地帮你检测并修复受损的系统文
件。
  
  具体方法:插入系统安装光盘,然后在命令提示符窗口中输入“sfc /scannow”命令并回车,这时sfc文件检测器将立即扫描所有受
保护的系统文件。在大约几分钟的时间里,SFC会检测并修复好受保护的系统文件。
  
  小提示:如果身边没有Windows XP安装盘,但以前在硬盘上备份了安装盘文件的话,可以通过下面的小小设置即可让文件检测器从硬
盘上的安装文件中来恢复系统文件。

展开“HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Setup”子键,然后在右侧窗口中修改Installation

Sources、ServicePackSourcePath和SourcePath三个键值为硬盘上的系统安装程序路径,例如Windows XP的安装原文件存放在E盘/CDXP

文件夹中,那么修改以上三个键的键值为“E:/CDXP”。这样再使用SFC命令时,则可以直接使用硬盘上的安装文件来恢复系统而不需要
插入安装光盘。

VPN有效,SVN连不上

这同样是一个超级悲剧的事情,在同事家,连上了公司VPN,
准备上传代码,但SVN无论如何都告诉我,“俺找不到服务器啊”

这个。。。

我刚在宾馆就是可以连上的,而且速度也很快。
那就找原因吧。

同样是ipconfig -all一下,发现,妈呀,
这些人居然把路由的网段和公司内部网段设成了相同的

不由倒吸一口凉气,
你用固定IP也就罢了,麻烦一些我也忍了,
可以用DCHP为什么还要用同一个网段啊

哥哥们啊。。。

能获取IP却连不上互联网

由于公司项目需要外出,就在一家宾馆住下了,闲着无聊,就连上网线准备看看新闻。
把IP地址获取模式设为DHCP,IP也正常获取到了,192.168.1.???,但无论如何都连不上网
打电话向前台确认,他们百般保证,绝对可以上网。

于是ipconfig -all一下,发现,居然没有网关。
这个可是个大悲剧了。

查了整整半个小时,发现:
天啊,居然是因为,VMWare的一块网卡的地址竟然是192.168.1.1

面壁去了。。。

话说回来,这不是第一次了
前几个月在EMC测试产品的时候,
别人的笔记本都可以联网,就是我的没反应
同样是因为这块VMWare的虚拟网卡

继续面壁。。。

手动删除Windows服务

步骤:

1.运行service.msc运用服务属性定位可执行文件位置
删除该文件
2.运行regedit定位到
/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
删除相应注册表项
3.重新启动

说明:
1.适用于无法删除的非系统自带服务选项
2.如果有卸载程序请首先使用卸载程序
3.有些服务是有移除选项的
例如:-remove
可以google一下^0^