Red5でURLベースのACL

ども、カブセネタ大好きアラガです。 Red5熱再加熱中でゴザイマス!

Wowza Media ServerでSWFVerification(っぽいこと)をする方法 - blog.katsuma.tv

unknownplace.org - URLベースでのACLをkamaitachiにもつけた

弊社のtypesterが、kamaitachでURL ベースでのアクセスコントロールをつけることができるようにしたってことですが、それならRed5でもできるよって話です。

それではさっそくコードです。

acl.AclApplication.java

package acl;

import java.util.List;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AclApplication extends ApplicationAdapter {
    protected static Logger log = LoggerFactory.getLogger(AclApplication.class);

    private List<String> aclList;

    public void setAclList(List<String> aclList) {
        this.aclList = aclList;
    }

    @Override
    public synchronized boolean connect(IConnection conn, IScope scope, Object[] params) 
    {
        if (this.accessControlBySwfUrl(conn)) 
            return super.connect(conn, scope, params);

        return false;
    }

    protected boolean accessControlBySwfUrl(IConnection conn)
    {
        String swfUrl = (String) conn.getConnectParams().get("swfUrl");

        for (int i = 0; i < aclList.size(); i++) {
            String acceptUrl = (String) aclList.get(i);
            if (swfUrl.equals(acceptUrl) || swfUrl.matches(acceptUrl)) return true;
        }
        return false;
    }
}

red5-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:lang="http://www.springframework.org/schema/lang"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                         http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">

    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="/WEB-INF/red5-web.properties" />
    </bean>

    <bean id="web.context" class="org.red5.server.Context" autowire="byType" />

    <bean id="web.scope" class="org.red5.server.WebScope" init-method="register">
        <property name="server" ref="red5.server" />
        <property name="parent" ref="global.scope" />
        <property name="context" ref="web.context" />
        <property name="handler" ref="web.handler" />
        <property name="contextPath" value="${webapp.contextPath}" />
        <property name="virtualHosts" value="${webapp.virtualHosts}" />
    </bean>

    <!-- Red5 Handler -->
    <bean id="web.handler" class="acl.AclApplication">
        <property name="aclList">
            <list>
                <!-- ここに許可するSWFURL -->
                <value>http://localhost:5080/demos/BallControl.swf</value>
                <value>http://localhost:5080/demos/.*</value>
            </list>
        </property>
    </bean>

</beans>

利用方法

  1. 上記のAclApplication.javaをコピペか継承してApplicationを作成

  2. red5-web.xmlのweb.handlerの設定でaclListに許可するswfのURLを設定

  3. Red5再起動

これで設定したURL以外のアクセスをリジェクトします。

URLを追加するたびに再起動は必要ですが、xmlの編集のみでコンパイルは不要なので便利ですね。

Perlが得意な方には激しくkamaitachiがおすすめだし、WOWZAのFMS越えとも思える高機能にはビビりますが、まだまだRed5も出来る子です。

それでは良いストリーミングライフを!

カヤックでは、FMSやkamaitachをはじめとするインタラクティブな技術に興味のあるエンジニアを募集しています!