2009-05-21 7 views
0

ウェブサーバーから401メッセージを受信したときに、ブラウザ認証ダイアログボックスをオーバーライドする方法はありますか?私はこのダイアログがいつ表示されているのかを知りたいのですが、ユーザーにその代わりに資格情報を記入します。アプリケーションのブラウザ認証ダイアログオーバーライド

概要:

私は、ウェブサーバを書いたので、基本的に私は、外部ブラウザを開いて、表示されているデータへのアクセスを得るためにローカルホストとポートに入れてから誰かを停止したいです。私のアプリは私の書かれたサーバーにリンクされた埋め込みのWebブラウザを持っています。ブラウザには復号化されたコンテンツが表示されるので、強制的に(内蔵のブラウザであっても)強制すると、外部ブラウザは資格情報を必要とします。埋め込みブラウザがファイルにアクセスしようとしている場合、ユーザーの資格情報を提供してコンテンツを表示します。

答えて

1

SWT 3.5M6には新しいListenerがあり、その中にAuthenticationListenerがあります。サーバーから渡された認証イベントをリスンし、解雇されます。以下のコードは、私が望む動作を実行するものです。それは認証を待っていて、ホストが自分のアプリケーションであれば、資格情報を返します。もちろん、適切な変数を使用してUSER_NAME、PASSWORD、およびHOST_NAMEを記入してください。それ以外の場合は、ブラウザの認証ダイアログボックスがポップアップされ、ユーザーは資格情報を入力します。このコードはまた、EclipseのSWTスニペットページで見つけることができます説明するための最善の方法を把握しようと

webBrowser.addAuthenticationListener(新AuthenticationListener()返信用

{

 public void authenticate(AuthenticationEvent event) { 
      try { 
       URL url = new URL(event.location); 

       if (url.getHost().equals(HOST_NAME)) 
       { 
        event.user = USER_NAME; 
        event.password = PASSWORD; 
       } 
       else 
       {  
        /* do nothing, let default prompter run */ 
       } 
      } catch (MalformedURLException e) { 
       /* should not happen, let default prompter run */ 
      } 
     } 
    }); 
+0

これはうまくいくのですか?それは私にとっては何の効果もないようで、リスナーは決して呼び出されません。 – willcodejavaforfood

+0

@willcodejavaforfood - AUTHORIZEしようとしている場合ではなく、AUTHENTICATEを試みている場合に動作します。私は同じコードを実際に打つことがない場所で同じ問題を抱えていました。私は、RedWolvesのようにURLの資格情報を渡しました。 –

+0

@ライアン - ありがとう:) – willcodejavaforfood

0

ユーザーに表示する内容を制御したい場合は、ログイン時にauth-methodを変更できますBASICからFORMへのweb.xmlの-configセクション。

次に、ユーザーが認証しているときに表示するページを指定し、それらのユーザーの資格情報を事前に入力しておくことができます。詳細は後に

Setting up Authentication for Web Applications

編集:

私の唯一の提案は、CLIENT-CERTにのauth-methodを変更すると、クライアントは、証明書の提示が必要とされる双方向SSLを必要とするだろうサーバーに送信します。証明書を組み込みブラウザにインストールして(そして外部のブラウザが証明書を取得できないことを確認して)、OKでなければなりません。実際には、認証ダイアログが表示されなくなります。

+0

感謝 。だからここに行く...私はWebサーバーを書いたので、基本的に私は、誰かが外部のブラウザを開いてローカルホストとポートを入れないようにしたい。コンテンツ、私は強制的に(私の埋め込みブラウザの場合でも)強制的に、exterブラウザーには資格情報が必要です。埋め込みブラウザがファイルにアクセスしようとしている場合は、ユーザーの資格情報を提供し、コンテンツを表示します。 –

+0

OKケン、あなたの質問をこのコメントの詳細で更新することをお勧めします...私の回答を更新します –

+0

あなたの提案マイケルに感謝します。問題を回避するためにどのように使用するのかまだ分かりませんが、あなたのアイデアは有用です。 –

1

表示されているパスワードを気にしない場合は、URLを構成して、資格情報を渡すことができます。 http://username:[email protected]これは認証ボックスに合格しますが、ユーザーに資格情報が表示されますので、探しているものと異なる場合もあります。

+0

お返事ありがとうございます。私はこれがバックグラウンドで起こることを望むでしょう。ユーザーは、埋め込みブラウザを使用して自分のアプリにログインした場合、資格情報がまったく必要ないことを知りませんでした。だから私は自分の信任状を秘密にしておきたい。これは、外部のブラウザが同じファイル/ポートにアクセスしようとすると、持っていない資格情報を必要とするためです。私は私の埋め込みブラウザの資格情報を提供します –

0

あなたの質問は少し不明です。基本認証全体は、HTTPヘッダーに基づいています。

ブラウザに承認ヘッダーが表示された場合は、ダイアログが表示されます。ダイアログからのコンテンツは、サーバーに送り返されます。特別なことは何もありません。それはbase64でエンコードされたユーザー名:パスワードです。問題は、あなたが干渉する方法である

wikipedia

を見てみましょう。承認ヘッダーを取得し、次の要求では、HTTPヘッダーを変更して資格情報を含める必要があります。

+0

ありがとう。私はすでにそれを前後にすべてのヘッダーを送信して、私は資格情報を入力して私のコンテンツにアクセスすることができます。私はどのようにJavaで私はその認証ヘッダを傍受することができます(ので、ダイアログが表示されません)とそれらの資格情報を記入してください知ってほしい。あなたが言ったとおりに上の私のコメントのいくつかは基本的にあなたの参照のために私のアプリを説明します –

0

を助け

希望は、私は、これは主に、ブラウザに依存行動とどのようなブラウザにサーバーのレポートだと思います。たとえば、Internet Explorerは、Microsoft製品であること、直接Windows資格情報の自動送信をサポート

(あなたがあなたのインターネット設定でこの動作を変更することができます)匿名の要求は例えば401

のFirefoxに失敗した後パスワードマネージャーを介してIDとパスワードを覚えておくように設定されていても、ユーザーには常にプロンプ​​トが表示されます。IEは自動ログインに失敗した場合にもプロンプトを表示します(IDが許可されていないため、Windowsの資格情報が401になるなど)。

私はウェブ開発者として、あなたが最も期待して調和の取れた方法で動作するようにサーバとアプリを設定する以外に、これをコントロールしているとは思わない...可能であれば、black hat territoryに入るかもしれない。

関連する問題