如何用数据库中的用户名密码对RTMP连接请求做认证?
转载请注明:文章来自www.wowza.cn
注意: 要访问最新的技术资料,请访问http://www.ttstream.com/wowza/
下面介绍了如何用AuthenticateUsernamePasswordProviderBase实现类以及ModuleRTMPAuthenticate 模块来获得RTMP连接时的用户名/密码并到你自己的数据库中做认证。www.wowza.cn

注:模块ModuleRTMPAuthenticate已经包含在Wowza Media Server® 3.5及以上的版本中了。

配置


  1. 在文本编辑器中打开[install-dir]/conf/[application]/Application.xml,在<Modules>列表的最后添加这个<Module>,如果你用的是Wowza Streaming Engine 4,请尽量用管理界面去添加:
    Code:
    <Module>
    	<Name>ModuleRTMPAuthenticate</Name>
    	<Description>ModuleRTMPAuthenticate</Description>
    	<Class>com.wowza.wms.security.ModuleRTMPAuthenticate</Class>
    </Module>
  2. 下载mySQL的JDBC驱动(http://dev.mysql.com/downloads/connector/j/5.0.html),然后拷贝适当的MySQL JDBC .jar 文件到Wowza Media Server 的/lib 文件夹中。

  3. 参考下面的代码,建立你自己的数据库认证模块:
    Code:
    package com.wowza.wms.example.authenticate;
    
    import com.wowza.wms.authentication.*;
    import com.wowza.wms.logging.WMSLoggerFactory; 
    import java.sql.*;
    
    public class AuthenticateUsernamePasswordProviderExample extends AuthenticateUsernamePasswordProviderBase
    {
    	public String getPassword(String username)
    	{
    		// return password for given username		
    		String pwd = null;
    		
    		WMSLoggerFactory.getLogger(null).info("Authenticate getPassword username: " + username);
    		
    		Connection conn = null;
    		try 
    		{
    			conn = DriverManager.getConnection("jdbc:mysql://localhost/wowza?user=root&password=mypassword");
    
    			Statement stmt = null;
    			ResultSet rs = null;
    
    			try 
    			{
    				stmt = conn.createStatement();
    				rs = stmt.executeQuery("SELECT pwd FROM users where username = '"+username+"'");
    				while (rs.next())
    				{
    					pwd = rs.getString("pwd");
    				}
    
    			} 
    			catch (SQLException sqlEx) 
    			{
    				WMSLoggerFactory.getLogger(null).error("sqlexecuteException: " + sqlEx.toString());
    			} 
    			finally 
    			{
    				if (rs != null) 
    				{
    					try 
    					{
    						rs.close();
    					} 
    					catch (SQLException sqlEx) 
    					{
    
    						rs = null;
    					}
    				}
    
    				if (stmt != null) 
    				{
    					try 
    					{
    						stmt.close();
    					} 
    					catch (SQLException sqlEx) 
    					{
    						stmt = null;
    					}
    				}
    			}
    
    			conn.close();
    		} 
    		catch (SQLException ex) 
    		{
    			// handle any errors
    			System.out.println("SQLException: " + ex.getMessage());
    			System.out.println("SQLState: " + ex.getSQLState());
    			System.out.println("VendorError: " + ex.getErrorCode());
    		}
    		
    		return pwd;
    	}
    	//www.wowza.cn
    	public boolean userExists(String username)
    	{
    		// return true is user exists
    		return false;
    	}
    }
  4. 部署这个Class:

    1. [install-dir]/conf/[application]/Application.xml文件的<Properties>中添加下面的配置参数。
      Code:
      <Property>
      	<Name>usernamePasswordProviderClass</Name>
      	<Value>com.wowza.wms.example.authenticate.AuthenticateUsernamePasswordProviderExample</Value>
      </Property>
  5. 最后,重启Wowza Media Server。