No ‘Access-Control-Allow-Origin’ エラーの対処方法

はじめに

こんにちは、ベーコン婆男です。

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つになり、サーバソースコードを修正します。

/getAllRooms (RoomController.java)
/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ファイルの上書きも忘れずに行ってください。

以上

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です