はじめに
こんにちは、ベーコン婆男です。
IonicやAngularを使って、Kurentoサーバを使ったAndroid / iOSアプリを開発するとき、以下のエラーが発生する場合があります。
XMLHttpRequest cannot load https://kurento-room.com:8443/getAllRooms. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://192.168.1.10:8100’ is therefore not allowed access.
No ‘Access-Control-Allow-Origin’ エラーと対処方法
AndoridやiOSの端末側から$httpでKurentoサーバ側のAPIを呼び出すとき、そのレスポンスを返すサーバとドメインが異なるため発生するエラーのようです。
そのため、サーバ側でクロスドメインのアクセスの許可設定を行う必要があります。
Kurento Room Demoアプリの場合、サーバ側はSpringフレームワークで開発されているため、各APIのメソッドに@CrossOrigin
アノテーションを付けると、クロスドメインのアクセスが許可されます。
参考:
CORS support in Spring Framework
https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
具体的には、CrossOriginクラスをimportし、クライアントから呼び出されるメソッドの前に、@CrossOrigin
を付けます。
import org.springframework.web.bind.annotation.CrossOrigin; ・・・ @CrossOrigin @RequestMapping("/getAllRooms") public Set<String> getAllRooms() { return roomManager.getRooms(); }
Kurento Room Demoで、対象となるメソッドは以下の5つになり、サーバソースコードを修正します。
/getUpdateSpeakerInterval (RoomController.java)
/getThresholdSpeaker (RoomController.java)
/close (DemoController.java)
/getClientConfig (DemoController.java)
DemoController.javaは、kurento-room-demo\src\main\java\org\kurento\room\demo\
RoomController.javaは、kurento-room-server\src\main\java\org\kurento\room\rest\
ソースを修正後、Kurento Room Demoを再ビルドします。
//サービス停止
$ sudo service kurento-room-demo stop
$ sudo service kurento-media-server-6.0 stop
//古いビルドファイルを削除
$ cd kurento-room $ rm -rf kurento-room-demo/target
//ビルド
$ mvn clean package -am -pl kurento-room-demo -DskipTests
$ cd kurento-room-demo/target
$ unzip kurento-room-demo-6.6.0.zip
$ cd kurento-room-demo-6.6.0
$ sudo service kurento-media-server-6.0 start
$ sudo ./bin/install.sh
再ビルド後、keystore.jksファイルの上書きも忘れずに行ってください。
以上