创建用户:调用的是: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也支持单点登陆。
这个将来再看了。