四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
用户标识 userid
表4-4 用户角色对照表列清单 名称 代码 标识 id 用户标识 userId 角色标识 roleid
表4-5 联系人信息表列清单
名称 代码 标识 id 联系人名称 contactsname 电子邮箱 email 联系地址 address 联系电话 phone 分组标识 group_id 用户标识 userid
表4-6 联系人分组表列清单 名称 代码 标识 id 分组名称 groupname 上级标识 pid 用户标识 userid
表4-7 角色信息表列清单 名称 代码 标识 id 角色名称 rolename 角色描述 description
表4-8 邮件信息表列清单 名称 代码 标识 id 消息名称 message_name 处理名称 repository_name 消息状态 message_state 错误信息 error_message 发送者 sender 收件人 recipients 远程主机 remote_host
23
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
远程地址 消息体 消息属性 最后更新时间 文件夹标识 状态
名称 消息名称 处理名称 消息状态 错误信息 发送者 收件人 远程主机 远程地址 消息体 消息属性 最后更新时间
名称 标识 用户标识 规则标识 预处理 规则名称 规则描述 内容 电子邮箱 remote_addr message_body message_attributes last_updated folderId status 表4-9 邮件处理池列清单 代码 message_name repository_name message_state error_message sender recipients remote_host remote_addr message_body message_attributes last_updated 表4-10 邮件过滤配置表列清单 代码 id userid ruleid precondition ruleName ruleDesc content email 表4-11 邮件附件信息表的列清单 名称 代码 id attachmentName attachmentPath attachmentSize userid 标识 附件名称 附件路径 附件长度 用户标识
4.3Web邮件系统功能实现
4.3.1. 用户注册和身份认证的实现
该模块包括用户的注册,登录界面的设计。用户必须先注册成为电子邮件系统的合法用户才能够使用。身份认证只考虑普通用户不考虑其它的用户。已注册的
24
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
用户凭自己的账号信息就可以登录进入邮件列表的界面。未注册的用户需要进入注册界面,输入新的用户名、密码以及确认密码和一些必要的用户信息才能注册,注册成功以后系统自动返回登录界面,重新登陆后方可进入系统的主界面。
系统使用类LogController管理所有注册、登录及其相关请求,包含session和Register对象。
(1)对象session包含如下的方法: j_checkLogin //用户登录 logout.jsp
//用户签退
doRedirect() //重定向到登录页面 (2)对象Register包含以下方法: doRegister() //用户注册
JcaptchaAuthenticationProcessingFilter
接下来详细描述对象session中的方法dologin()的调用过程: j_checkLogin
调用服务类
org.acegisecurity.ui.webapp.jcaptcha.auth.
JcaptchaAuthenticationProcessingFilter中的业务方法attemptAuthentication (),即根据用户名、用户密码、图形码校验用户登录信息,返回对应的User对象给session类实例;代码如下:
String username = obtainUsername(request); String password = obtainPassword(request); String captcha = obtainCaptcha(request); if (username == null) { username = \
}
if (password == null) { }
if (captcha == null) { }
Properties exMappings=new Properties();
HttpSession session = ((HttpServletRequest) request).getSession();
25
password = \
captcha = \
boolean valid = false;
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
26
if (session != null) { } /*
* use the acegi interface of the use authrisation */
String id = session.getId(); try {
valid = this.captchaService.validateResponseForID(id,(Object)
captcha).booleanValue();
} catch (CaptchaServiceException e) {
exMappings.setProperty(BadJCaptchaException.class.getName(), } if (valid) {
((CaptchaSecurityContext)
this.setExceptionMappings(exMappings);
throw new BadJCaptchaException(\
this.captchaFailureUrl);
e.getMessage());
SecurityContextHolder.getContext()).setHuman();
} else {
exMappings.setProperty(BadJCaptchaException.class.getName(), }
exMappings.setProperty(BadJCaptchaException.class.getName(), this.setExceptionMappings(exMappings);
throw new BadJCaptchaException(\
this.setExceptionMappings(exMappings);
throw new BadJCaptchaException(\
this.captchaFailureUrl);
} else {
this.captchaFailureUrl);
access\
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
UsernamePasswordAuthenticationToken authRequest = new
UsernamePasswordAuthenticationToken(username,password);
request.getSession().setAttribute(ACEGI_SECURITY_LAST_USERNAME_KEY,username);
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
登录继续调用服务类ServiceMail的getNewMail()方法根据用户提供的帐号和密码连接邮件服务器,如果能连接上,那么表明用户提供的信息是正确的,接着将接收邮件,并将User对象实例添加进此次HTTP Session中。
如果不能连接到邮件服务器,那么表明用户提供的信息错误,则调用doRedirect()方法重定向到登录页面。
27