先熟悉一下javax.servlet.http.Cookie和javax.servlet.http.HttpSession。
JForum系统有一项功能是:实时显示在线的注册会员数、匿名访客数。
登录本机的JForum,并选择“自动登录”后,可以看到如下的Cookie信息:
SystemGlobals.properties中关于Cookie的配置如下:
cookie.name.data = jforumUserId
cookie.name.user = jforumUserInfo
cookie.name.autologin = jforumAutoLogin
cookie.name.userHash = jforumUserHash
在Eclipse中,使用“文件搜索”搜索“COOKIE_NAME_USER”,只有一条记录。可见,在2.1.8版本中根本没有用到jforumUserInfo。
jforumUserId的值为jforum_users表中user_id列的值,匿名用户的user_id为1。登录时如果选择了“自动登录”,则jforumAutoLogin的值为1,jforumUserHash的值为一个散列值,否则,客户端不会有jforumAutoLogin和jforumUserHash。
jforumUserHash的生成规则如下(即systemHash):
// Generate the user-specific hash
String systemHash = MD5.crypt(SystemGlobals.getValue(ConfigKeys.USER_HASH_SEQUENCE) + user.getId());
String userHash = MD5.crypt(System.currentTimeMillis() + systemHash);
// Persist the user hash
UserDAO dao = DataAccessDriver.getInstance().newUserDAO();
dao.saveUserAuthHash(user.getId(), userHash);
systemHash = MD5.crypt(userHash);
其中,SystemGlobals.getValue()是读取配置值,默认值为:
user.hash.sequence = 04904SDFfhfh449911-**%$nvMDFHDhskda6546546as4df4ads6f54ads654
在正式环境下使用JForum时,应该修改该值。
net.jforum.entities.UserSession用于抽象用户会话信息。很奇怪它的构造函数:
public UserSession() {}
public UserSession(UserSession us)
{
if (us.getStartTime() != null) {
this.startTime = new Date(us.getStartTime().getTime());
}
if (us.getLastVisit() != null) {
this.lastVisit = new Date(us.getLastVisit().getTime());
}
this.sessionTime = us.getSessionTime();
this.userId = us.getUserId();
this.sessionId = us.getSessionId();
this.username = us.getUsername();
this.autoLogin = us.getAutoLogin();
this.lang = us.getLang();
this.privateMessages = us.getPrivateMessages();
this.imageCaptcha = us.imageCaptcha;
this.ip = us.getIp();
}
用一个UserSession对象来构造另一个UserSession对象?第6、10行,为什么不直接this.startTime = us.getStartTime();而多此一举呢?我觉得这样做的目的是想实现“clone”效果,利用一个UserSession对象,克隆另一个UserSession对象。
关于net.jforum.SessionFacade类
从类名中Facade单词中可以看出,作者想让SessionFacade担任UserSession的门面,即门面模式。门面模式是对象的结构模式。外部与一个子系统的通信必须通过一个统一的门面对象进行,这就是门面模式。[1] 在门面模式中,通常只需要一个门面类,并且此门面类只有一个实例,换言之它是一个单例类。[2] 具体到JForum而言,“子系统”包括:UserSession类、CacheEngine实现类以及和Session DAO方法相关的类。SessionFacade类中除了setCacheEngine()方法外,都是静态方法,也算是单例类了。这些和教科书中所说的还是比较一致的。
门面不是不能越过的。JForum中也有一小部分代码直接使用的UserSession us = new UserSession(); us.方法调用,即越过了SessionFacade门面。
让我们再读一下《Java与模式》第32章 门面(Facade)模式和《设计模式》第4.5节 FACADE(外观)——对象结构模式吧。
[1] 引自《Java与模式》P561
[2] 引自《Java与模式》P563
分享到:
相关推荐
通过研究JForum3的源代码,开发者不仅可以学习到Java Web开发的最佳实践,还能掌握如何构建一个健壮、易扩展的社区平台。无论是对Java框架的深入理解,还是对Web应用开发流程的整体把握,JForum3都是一份宝贵的教育...
**JForum 源代码与物理结构详解** JForum 是一个功能丰富的开源论坛系统,以其高效、可扩展和用户友好的界面而闻名。这个压缩包包含 JForum 的源代码和类包,对于开发者来说,这是一个宝贵的资源,可以深入理解其...
**JForum3源代码数据库详解** JForum3是一款基于Java的开源论坛系统,它提供了丰富的社区功能,包括用户管理、论坛板块、主题讨论、帖子回复等。本篇将深入探讨JForum3的源代码和其与数据库的交互,以及如何进行...
《JForum漏洞利用源代码解析》 JForum是一款流行的开源Java论坛系统,它以其功能丰富、社区友好而受到许多用户的青睐。然而,如同任何复杂的软件系统一样,JForum也存在安全漏洞,这些漏洞可能被恶意用户利用,对...
jforum配置安装介绍+源代码 jforum配置安装介绍+源代码
《JForum 2.1.9源码深度解析与应用指南》 JForum,作为一款开源的、基于Java的网络论坛系统,深受开发者喜爱。2.1.9版本的发布,不仅提供了稳定的功能,还为开发者们带来了丰富的自定义可能性。本文将深入探讨...
《jforum开源论坛官方源代码(2.1.9)详解》 JForum是一款基于Java技术的开源论坛系统,以其高效、稳定和易用性在开源社区中受到...通过研究源代码,我们可以提升自己的编程技巧,理解如何构建高效、安全的网络社区。
5. **数据库设计**:配合SQL SERVER 2008数据库,jForum的数据存储和查询优化值得深入研究。`jforum_ns.bak`是数据库备份文件,可以还原到SQL SERVER 2008中,观察论坛的表结构、索引和数据关系。 其次,关于SQL ...
jforum-2.1.8版本完整源代码(1),因为完整版本超过15mb,因此分成两部分下载。
通过深入研究Jforum的源代码,开发者可以了解到Java Web应用的开发模式,包括MVC架构、ORM框架的使用(如Hibernate)、国际化处理、权限控制等方面的知识。同时,这也是学习和理解Web论坛系统设计与实现的一个宝贵...
在这个"jforum-2.1.8-编译代码.zip"压缩包中,包含了JForum 2.1.8版本的源代码,对于开发者来说,这是一个深入理解JForum工作原理、进行二次开发或定制化改造的宝贵资源。 首先,让我们了解JForum的基本架构。...
JForum 是采用Java开发的功能强大且稳定的论坛系统。它提供了抽象的接口、高效的论坛引擎以及易于使用的管理界面,同时具有完全的权限控制、多语言支持(包括中文)、高性能、可自定义的用户接口、安全、支持多...
jforum-2.1.8版本完整源代码(2) 请找到(1)部分一起解压。
JForum的SSO实现类(如`CookieUserSSO.java`)可以从请求中读取这个Cookie并提取用户信息。 ```java package net.jforum.sso; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; ...
对于开发者而言,JForum 2.1.8的源代码是一份宝贵的资源。通过阅读和学习源码,可以了解Web应用的设计模式,如MVC架构,以及如何利用Java Servlets和JSP进行动态网页开发。同时,还可以研究其数据库设计,学习如何...
总结来说,JForum3是一个成熟的Java论坛解决方案,它的完整源代码对于Java Web开发者来说是一个宝贵的资源,无论是用于学习、研究还是定制自己的论坛系统,都能从中受益匪浅。通过深入了解JForum3的架构和实现,...
这款论坛软件使用了Java语言编写,遵循开放源代码的原则,允许用户自由地使用、修改和分发。JForum3是JForum系列的第三个主要版本,相较于前两个版本,它在性能、安全性和用户体验方面都做了显著的提升。 在Java...
JForum的源代码是公开的,这对于学习Java Web开发和理解MVC模式的人来说是一份宝贵的资源。通过阅读和分析JForum的代码,开发者可以深入了解如何在实际项目中应用MVC模式,学习到如何组织代码以提高可读性和可维护性...
5. **Session和Cookie管理**:研究如何利用session和cookie来跟踪用户的会话状态,实现用户登录状态的保持。 6. **安全机制**:分析JForum的认证和授权过程,了解如何防止SQL注入、XSS攻击等网络安全问题。 7. **...
标题"jforum2论坛源码"表明了我们关注的是一个名为jforum2的开源论坛系统的源代码。jforum2是一个基于Java技术的讨论板平台,允许用户进行互动交流,提供社区建设和管理功能。源码通常包含程序的所有原始代码,可供...