James服务器与OA集成
James Wallace
2008.11.11
主要步骤
• 1. 将James的用户存储存储在与OA相同的数据库内
• 2.在OA的用户管理中,统一管理James用户
• 3.测试
统一存储
• apps/james/SAR-INF/config.xml
设置数据库连接
• 自带若干数据库配置,这里使用MYSQL
<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
<driver>com.mysql.jdbc.Driver</driver>
<dburl>jdbc:mysql://127.0.0.1:3306/mail?autoReconnect=true</dburl>
<user>root</user>
<password>root</password>
<max>20</max>
</data-source>
• 在dburl中:
• 127.0.0.1:3306指数据库服务器IP及端口
• Mail指向服务器中使用的数据库,可以与其他系统集成
• 例如为了与EasyOA集成,可以设为easyoa
用户帐户位置
• 默认使用文件系统
• <repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">
• <destination URL="file://var/users/"/>
• </repository>
• 改为使用数据库
• <repository name="LocalUsers" class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://maildb/users">
• <sqlFile>file://conf/sqlResources.xml</sqlFile>
• </repository>
数据字典
• James的用户凭据保存在users表中
• pwdHash字段保存以SHA算法加密的密码
集成思路1:应用系统与James共享users表
• 好处
– 只需要维护一张表,简单
– 不会出现删除用户或增加用户时表间不同步的现象
• 缺点
– 不适合使用中文用户名
– 有些字段是特定于james 的
– 如果还要维护用户个人信息,会造成列过多和POJO 对象过大
解决方案
• 解决方案:
– 凭据信息共享users表
– 用户详细信息保存在另一个表中,例如user_info,两表间建立一对一关系。
• 优势:
– 凭据信息对应的POJO 小,能够提高系统登录、验证等方面的性能
– 需要用户详细信息的地方并不多,可以与凭据结合对应另一个大的POJO
集成思路2
• 应用系统和james各使用各的用户表
• 优点
– 各自为战
– 不用修改现有POJO
• 缺点
– James的用户表users很容易与应用系统的表混淆,
– 修改james的用户表名也容易出错
– 容易造成OA和电子邮件用户帐户不同步
• 暂时不采用
在OA中统一管理用户
要求
• 1用户名不可为中文,必需输入
• 2密码不可为空,至少5位,不可为中文
• 3密码保存使用JAMES提供的SHA加密
问答
• Q:以前的OA使用中文用户名
• A:不规范的方式,不代表是合适的。
• Q:如何表达中文名称
• A:提供一个字段,保存显示名称,或全名
• Q:以前的系统可以没有密码
• A:密码是安全的基本,电子政务对安全系统要求很高,用户的不良要求,不应该在产品上体现。必须使用5位以上非汉字密码
解决方案
• JAMES源代码的security文件夹中提供了DigestUtil.java,用于实现SHA算法,可以单独取出放在应用程序的工具包内
• 其中的静态方法DigestUtil.digestString(newPass, algorithm)用于生成字符串的摘要。
• 保存用户密码的示例方法如下:
public boolean setPassword(String newPass) {
try {
hashedPassword = DigestUtil.digestString(newPass, algorithm);
return true;
} catch (NoSuchAlgorithmException nsae) {
throw new RuntimeException("Security error: " + nsae);
}
3.测试
双向用户测试
• 1.在OA内添加用户,在james控制台使用listusers可以列出
• 2.在james控制台使用adduser添加的用户,在OA中可以看到
• 3.在OA中设置和修改的密码,在James邮件客户端中可以使用