现在的位置: 首页 > java > openfire > 正文
openfire spark 注册流程 分析
2012年05月16日 openfire ⁄ 共 2238字 暂无评论

Spark注册信息的XML TAG&NAMESPACE :  <query xmlns="jabber:iq:register">

 

=====================================

spark启动后,运行LoginDialog类,LoginDialog.....注册按钮创建注册Panel:AccountCreationWizard. AccountCreationWizard的“创建账号”按钮监听事件 执行createAccount()方法,此方法首先做一些简单验证,然后创建一个SwingWorker实例,在SwingWorker中调用AccountManager.createAccount(username, password)[spark注册比较简化版,只提供了这2条字段信息 ]。

AccountManager(smark.jar)注册流程:

1,调用supportsAccountCreation(),检查是否支持注册,以及注册需要哪些字段,通过发包(Registration extends IQ)确认IQ.TYPE=GET:

<iq id="NI4W1-5" to="zzypc" type="get" from="zzypc/572dba43">
  <query xmlns="jabber:iq:register"/>
</iq>

服务器端(IQRegisterHandler)会返回是否允许注册,和需要的字段情况:

<iq type="result" id="NI4W1-19" from="zzypc">
  <query xmlns="jabber:iq:register">
    <username/>
    <password/>
    <email/>
    <name/>
    <x xmlns="jabber:x:data" type="form">
      <title>XMPP Client Registration</title>
      <instructions>Please provide the following information</instructions>
      <field var="FORM_TYPE" type="hidden">
        <value>jabber:iq:register</value>
      </field>
      <field label="Username" var="username" type="text-single">
        <required/>
      </field>
      <field label="Full name" var="name" type="text-single"/>
      <field label="Email" var="email" type="text-single"/>
      <field label="Password" var="password" type="text-private">
        <required/>
      </field>
    </x>
  </query>
</iq>

2,当可以注册时,spark将需要提供的注册信息(服务器端发过来的,上面的包信息),填充到注册类(spark并没有这样做,仅提供了username, password,其他服务器端需要的注册信息都填充成了空字符串,代码:

for (String attributeName : getAccountAttributes()) {
       attributes.put(attributeName, "");
}),

然后再次发生注册信息(Registration extends IQ),IQ.TYPE=SET.

<iq id="NI4W1-6" to="zzypc" type="set" from="zzypc/572dba43">
  <query xmlns="jabber:iq:register">
    <username>xxxxxxxxxxxxx</username>
    <email/>
    <name/>
    <password>xxxxxxxxxxxxx</password>
  </query>
</iq>

,服务器端接收后开始注册。

=============================================

服务器端程序通过IQRegisterHandler处理

===========================

如果需要扩展注册时提供的其他数据,扩展点:

1,客户端:

1.1,AccountCreationWizard(Panel)中多增加几个FIELD

1.2,AccountCreationWizard.createAccount()中SwingWorker worker调用AccountManager,createAccount(getUsername(), getPassword()),应该修改成调用AccountManager.createAccount(String username, String password, Map<String, String> attributes)

2,服务器端:

2.1,IQRegisterHandler.initialize()方法时,增加probeResult(Element)需要的字段信息。

2.2, IQ.Type.get/set 时,简单修改

给我留言

您必须 [ 登录 ] 才能发表留言!

×