用户系统

finderweb采用的是无数据库设计,用户数据都存储在本地磁盘上,具体的存储目录在~/WEB-INF/classes/META-INF/conf/user目录中,以用户名为文件名,每个用户一个文件。

用户数据在用户第一次登录的时候会被缓存到内存中,默认15分钟;用户数据的存储文件实际上是个properties文件,例如:


userId = 1
userName = admin
nickName = 管理员
userSalt = af81d025
password = a5084c9b68a30d63ff76a71da5c475f9911cdadd3d56926c8635467352ca345f
createTime = 1508822679619
updateTime = 1531824086179

上面这个例子就是finderweb默认的admin账号,如果忘记了admin账号的密码,可以将此内容覆盖到admin.dat文件,重启之后即可重新使用默认的admin账号登录。

为了保持易读以及美观,finderweb对属性文件的读取采用的不是java.util.Properties类,而是自己读取文件内容并解析属性到一个Map实例,对属性值不要求采用Unicode编码,等号前后允许有任意多个空格,支持注释,支持转义字符,如果某个属性值前面必须使用空格,可以使用双引号引起来。

单机部署的情况下,不涉及用户数据的同步,因此用户数据同步主要指的是集群模式。集群模式下finderweb是如何同步用户数据的?管理控制台也没有对应的同步操作,finderweb是如何保证用户无论访问到任何机器都能登录呢?

这个问题其实不是个问题,因为finderweb从来不同步用户数据。集群模式下,用户数据只存储在master上;除了默认的admin.dat外,slave上不存储用户数据,而且slave也从来不会读取用户数据,也可以手动删除所有slave上的admin.dat。

用户登录过程

当用户登录的时候,无论用户请求最终到达集群内的那一台机器,finderweb首先会检查自己是否是master,如果是,则自己处理;如果不是,则将请求转发给master;也就是说在集群模式下只有master提供登录服务。