读书人

Roller:创办用户

发布时间: 2012-11-05 09:35:12 作者: rapoo

Roller:创建用户

创建用户:调用的是:roller-ui/register.rol

?

响应的类为: org.apache.roller.weblogger.ui.struts2.core.Register

?

在Action中,首先判断配置参数: users.registration.enabled ,是否允许用户注册;

?

用户注册页面,有一个bean: ProfileBean,记录用户页面上在form中输入的信息

把系统的Locale、timezone都设置到Bean中。

?

然后获取参数:users.sso.enabled

来看acegi中是否有用户验证可用,并且从form中获得客户的用户数据

目前在配置文件roller.properties中的值是false ------- 如果是true,会怎么样? --- 后面有说明

返回INPUT(struts2的INPUT --- 对应字符串:input)

?

就是跳到页面:tiles.Register , 具体的页面为:/WEB-INF/jsps/core/Register。jsp

-------------------------------

?

在struts的配置文件中,采用了通配符

<action name="register!*" method="{1}" class=...>

?

页面里,直接提交到action的一个方法中:在Register.jsp中

<s:form action="register!save">

?

虽然采用了struts2,还是采用有bean方式的action,

-------------------------------

?

看注册用户保存的部分:

?

首先检验有效性:

??? 最前面一段还是判断SSO ----> 这个要看一下,到底是什么,否则对Acegi或者roller的用户管理会有缺陷。

?? 判断参数"username.allowedChars",看用户输入的用户名,是否在这些字符中

?????????? ---- 用的是 commons-lang.jar中的 org.apache.commons.lang.CharSetUtils中的方法:keep

?

如果没有错误(AcctionSupport中的 hasActionErrors)

? 从weblogger中得到 userMaanger

? 创建一个user对象,把用户输入的数据,复制到这个User对象中。

????? 对密码做了特殊处理,如果用户设置了密码和密码确认,就重置密码

?

? 用户是否需要通过邮箱进行校验: 通过参数 user.account.activation.enabled

???? 如果需要,把用户状态设置成 false,通过UUID创建一串字符串(UUID.randomUUID().toString())

?????? 对校验码也进行校验:

?????????? 用户是保存在表:User中, 其中一个字段:activationCode保存校验码。

?????? 如果新生成的校验码在数据库中能够找到,代表校验码需要再加工:

?????????? 再生成校验码,重复3次,如果其中一次在数据库中找不到就退出,如果校验码生成3次都有重复,抛出异常

?

?把用户信息保存下来。

??? 在用户管理中(UserManagerImpl),判断如果是第一个用户,就不用邮件校验用户了,

??? 检查用户名是否存在,如果存在抛异常。

?

?? 给用户赋予 editor的角色, 如果是管理员(第一个用户),增加admin角色

?

?? 保存:就通过strategy的 store方法,参数只有一个object,这个对保存任何对象都适用;

?

?? 保存后手工commit一下(weblogger.flush)

?

?? 如果需要邮件验证的话,并且用户的验证码不为空的话,发送邮件:

???? 通过MailUtil.sendUserActivationEmail

?

?? 页面跳转到:pending中,

?? 否则跳转到 SUCCESS

?

-----------------------------------------

?

这里面涉及到一个问题没有稿清楚:配置文件runtimeConfigDefs.xml的作用:

看这个文件中的配置,都是配置属性的缺省值,以及在程序中的property name和配置property文件的key之间对照关系,

?

是看程序没有看清楚:

?? 取参数user.account.activation.enabled,通过Webloggerruntimeconfig获取的,

?? 这个其实也是通过weblogger.getPropertiesManager()获取的参数

??? 也就是从 JPAPropertiesManagerImpl.java中获取。

? 这些值都是从数据库中获取的,roller_properties表

?

-------------------------------

用户激活:

?如果是需要用户激活的,通过链接:/roller-ui/register!active.rol?activationCode=?进行激活

?激活流程很简单:

??? 从用户表中,根据激活码获取到用户,

????????????????????? 然后将设置成enable,清除激活码

????????????????????? 重新存盘

????????????????????? 结束。

?

-------------------------------

在上面,提到用户在注册的时候,会检查参数:users.sso.enabled

sso:单点登陆,Roller也支持单点登陆。

?

这个将来再看了。

?

?

读书人网 >软件架构设计

热点推荐