(一)首先需求确定你用的数据库是LDAP还是RDBMS,如果是RDBMS, 首先应该确保weblogic已经连上了你的数据库.连接方法如下.

  我这里用的是MYSQL数据库,相对来说比较麻烦,首先是要下载一个MYSQL的连接的JAR包.我用的是mysql-connector-java-3.0.17-ga-bin.jar , 在weblogic目录下的common\bin下找到commEnv.cmd打开 ,找到set weblogic_classpath= 后边加上mysql驱动的路径 ,例:%WL_HOME%\server\lib\mysql-connector-java-3.0.17-ga-bin.jar.启动weblogic,进入控制台输入用户名和密码进入HOME.

1.点开Service->JDBC->Data Source

2.JDBC Data Source Properties 页面

Name和JNDI Name可以一样 我起名为MySQLJDBCDataSource

Database Type:选择MySQL

Database Driver:默认,next.

3.Transaction Options

选择倒数第二个Emulate Two-Phase Commit Next.

4.Connection Properties

Database Name :自己的数据库名 例如:test

Host Name :主机名 例如:localhost或192.168.6.99

Port :3306 (mysql默认)

Database User Name:数据库用户名

Password :数据库密码

Confirm Password :同上 Next

5.Test Database Connection

可以点击Test Configuration 测试一下数据库连接。Next

6.完成

(二)回到HOME界面,点击左边方框里的Security Realms.进入之后选择myrealm.进入之后,我们选择Providers,我们看到有两个默认的Providers:DefaultAuthenticator和DefaultIdentityAsserter,其中我们点击DefaultAuthenticator,把Control Flag改成SUFFICIENT.之后保存,回到刚才的界面.我们需要创建两个provider.点NEW,起个名字a(可以随便起),修改类型为identityAssertionAuthenticator,保存之后回到providers界面,点你刚起的名字.进入之后把类型改为SUFFICIENT.之后保存.我们再建一个provider.在providers界面点new,输入名字b,更改类型DBMSDigestIdentityAsserter,之后保存回到providers界面从新进入b,将WWW-Authenticate.digest导到Available框里,然后点击上面的 provider specific,我们开始配置.

DataSourceName:我们刚才建立的JDBC节点名

SQLGetUsersPassword:写一个SQL语句SELECT password FROM user_auth username = ?     (其中?用来传入username变量)

DigestRealmName:在SIP消息里面用的域名

其他默认.保存

最后点击左面的Release configuration激活设置.到此,weblogic控制台上配置完成.

 

接着进入我们的程序 在SIP.XML里面将配置信息加进去

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sip-app

  PUBLIC "-//Java Community Process//DTD SIP Application 1.0//EN"

  "http://www.jcp.org/dtd/sip-app_1_0.dtd">

<sip-app>

 <servlet>

  <servlet-name>DealRegister</servlet-name>

  <servlet-class>ngn_ims.imscore.ps.DealRegister</servlet-class>

 </servlet>

 <servlet>

  <servlet-name>DealSubscribe</servlet-name>

  <servlet-class>ngn_ims.imscore.ps.DealSubscribe</servlet-class>

 </servlet>

 <servlet>

  <servlet-name>DealPublish</servlet-name>

  <servlet-class>ngn_ims.imscore.ps.DealPublish</servlet-class>

 </servlet>

 <servlet>

  <servlet-name>DealAck</servlet-name>

  <servlet-class>ngn_ims.imscore.im.DealAck</servlet-class>

 </servlet>

 <servlet>

  <servlet-name>DealBye</servlet-name>

  <servlet-class>ngn_ims.imscore.im.DealBye</servlet-class>

 </servlet>

 <servlet>

  <servlet-name>DealInvite</servlet-name>

  <servlet-class>ngn_ims.imscore.im.DealInvite</servlet-class>

 </servlet>

 <servlet>

  <servlet-name>DealMessage</servlet-name>

  <servlet-class>ngn_ims.imscore.im.DealMessage</servlet-class>

 </servlet>

 

 

 <servlet-mapping>

  <servlet-name>DealRegister</servlet-name>

  <pattern>

   <equal ignore-case="false">

    <var>request.method</var>

    <value>REGISTER</value>

   </equal>

  </pattern>

 </servlet-mapping>

 <servlet-mapping>

  <servlet-name>DealPublish</servlet-name>

  <pattern>

   <equal ignore-case="false">

    <var>request.method</var>

    <value>PUBLISH</value>

   </equal>

  </pattern>

 </servlet-mapping>

 <servlet-mapping>

  <servlet-name>DealSubscribe</servlet-name>

  <pattern>

   <equal ignore-case="false">

    <var>request.method</var>

    <value>SUBSCRIBE</value>

   </equal>

  </pattern>

 </servlet-mapping>

 <servlet-mapping>

  <servlet-name>DealAck</servlet-name>

  <pattern>

   <equal ignore-case="false">

    <var>request.method</var>

    <value>ACK</value>

   </equal>

  </pattern>

 </servlet-mapping>

 <servlet-mapping>

  <servlet-name>DealBye</servlet-name>

  <pattern>

   <equal ignore-case="false">

    <var>request.method</var>

    <value>BYE</value>

   </equal>

  </pattern>

 </servlet-mapping>

 <servlet-mapping>

  <servlet-name>DealInvite</servlet-name>

  <pattern>

   <equal ignore-case="false">

    <var>request.method</var>

    <value>INVITE</value>

   </equal>

  </pattern>

 </servlet-mapping>

 <servlet-mapping>

  <servlet-name>DealMessage</servlet-name>

  <pattern>

   <equal ignore-case="false">

    <var>request.method</var>

    <value>MESSAGE</value>

   </equal>

  </pattern>

 </servlet-mapping>

                      <!--主要部分-->

 <security-constraint>

  <resource-collection>

   <resource-name>RegisterRequests</resource-name>

   <servlet-name>DealRegister</servlet-name>

   <!--servlet-name>RegisterServlet</servlet-name-->

   <sip-method>REGISTER</sip-method>

  </resource-collection>

  <auth-constraint>

   <role-name>roleadmin</role-name>

  </auth-constraint>

 </security-constraint>

  <login-config>

  <auth-method>DIGEST</auth-method>

  <realm-name>myrealm</realm-name>

  </login-config>

 <security-role>

  <role-name>roleadmin</role-name>

 </security-role>

</sip-app>

 

新建一个weblogic.xml文件

<weblogic-web-app>

 <security-role-assignment>

  <role-name>roleadmin</role-name>

  <principal-name>b</principal-name>   <!--此处将roleadmin这个任务交给b来完成-->

 </security-role-assignment>

</weblogic-web-app>

 

在web.xml里面定义副本

<!DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

 <welcome-file-list>

  <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

 <security-role>

  <role-name>roleadmin</role-name>

 </security-role>

</web-app>

注意此处的XML头文件需要换成类似上面的样子,否则报错.

最后 试试你的注册消息吧.

(digest功能还未经过测试,待续)