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也支持单点登陆。

 

这个将来再看了。

 

 

你可能感兴趣的:(UI,bean,配置管理,SSO,Acegi)