(一)首先需求确定你用的数据库是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功能还未经过测试,待续)