2

これが私の問題です。動的データを取得するためにポーリングできるシステムを開発しています。それはGrailsにあり、特定のコントローラーアクションでリクエストを行うと、たとえば「http://localhost:8080/foo/bar」と言うと、最新のデータを含むJSONリストが返されます。

セキュリティと機能を強化するために、基本認証を有効にして、Spring Security (Grails Acegi プラグイン) を使用してページを保護しました。ログインすると、システムはユーザー プロファイルに関する情報を自動的に読み込み、返されるデータを変更します。したがって、認証は必須です。

これは機能します。任意のブラウザーからアクションをポーリングでき、データが返されます。私の Grails アプリケーションには、この URL を呼び出す JavaScript スクリプトがあります。

問題は、JavaScript スクリプトを外部化して顧客に配布し、顧客が独自の HTML ファイルを作成し、JavaScript ファイルをプラグインし、AJAX を使用して (API のようなもので) データにアクセスできるようにしたいことです。そのようです:

$.ajax(url: urlWithParams, 
       method: 'GET', 
       beforeLoad: function(xhr) { 
           xhr.setRequestHeader('Authorization', authString);
       },
       success: myFunction
});

しかし、うまくいきません。まず第一に、クロスドメインの GET リクエストが難しいことを知っています。しかし、私の場合は基本認証を使用します。資格情報を XmlHttpRequest に直接入力する必要があり、Firefox でプリフライトされた要求を生成し (GET を OPTIONS で置き換える)、私の Grails アプリケーションはそれを処理しないため、よりトリッキーな認証を使用します。 .

私の問題は非常に具体的です。悪意のあるアクセスを防ぐために基本認証を使用していますが、クロスドメインの制限により、適切な資格情報を使用してアプリケーションにアクセスできません!

私は何をすべきか!IFrame を試してみましたが、ページのコンテンツを取得できません (「アクセスが拒否されました」というエラーが表示されます - これもドメイン間の制限です)。

また、ajax() 関数の jQuery のユーザー名とパスワードのフィールドは機能しません。

保護されていないページで単純な AJAX GET リクエストを実行し、資格情報をパラメーターとして送信すると、ページは資格情報を使用して保護されたページにリダイレクトされますか? ブラウザがリクエストを壊すことはありませんが、基本認証資格情報でリダイレクトできますか?

うまくいかない気がします(新しいリクエストを生成するリダイレクトに関係するものなど...)。私は正しいですか、それともうまくいくべきですか?

JSONP でこの問題を解決できますか? JSONP を使用して Basic 認証を統合する方法はわかりませんが、...

どうもありがとうございました!

4

1 に答える 1

1

JSONPを使用して質問を解決しました。AJAX呼び出しの基本的な認証を必要としないようにアプリケーションを変更しました。jQueryの$.getJSON()メソッドがうまくいきました。

于 2010-08-05T01:59:40.683 に答える