2017-11-03 10 views
4

JavaFXをクライアント側に、JavaEE/Glassfishをサーバー側に、MySQLをデータベース管理システムとして、3層アプリケーションを開発します。また、ネットワーク経由でデータを転送するためにRESTとJSONを使用しました。 JavaEEのセキュリティ手段を使用して認証を設定しようとしました。私はエンタープライズBeanの注釈付き宣言的アプローチを使用しています。すでにGlassfishファイルレルム(user/groupの追加)とglassfish-web.xml記述子(group-nameタグとroleタグの追加)を設定しています。 JavaEEチュートリアルでは、クライアントが保護されたリソースを取得しようとしたときに必要な準備がすべて完了した場合、Glassfishはクライアントにログインとパスワードのペアを要求する必要があります。私はそれがどのようにWebクライアントになるのか分かりますが、私の場合はデスクトップのJavaFXクライアントです。Glassfishがデスクトップアプリケーションでクライアントにどのように尋ねるのか分かりません。 JavaFX-Glassfishでの認証メカニズムの作成方法助けてください。JavaEEでJavaFXクライアントを認証する方法

UPDATE ブラウザ(Chrome、IE)からサーブレットを呼び出そうとすると認証ウィンドウが表示され、認証メカニズムが機能することがあります。しかし、私がJavaFXウィンドウを開くと何も見ません(白いシーン)。

import javafx.application.Application; 
import javafx.geometry.HPos; 
import javafx.geometry.VPos; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.Region; 
import javafx.scene.paint.Color; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

    public class WebViewSample extends Application { 
     private Scene scene; 

     @Override 
     public void start(Stage stage) { 
      // create the scene 
      stage.setTitle("Web View"); 
      scene = new Scene(new Browser(), 750, 500, Color.web("#666970")); 
      stage.setScene(scene); 
      scene.getStylesheets().add("webviewsample/BrowserToolbar.css"); 
      stage.show(); 
     } 

     public static void main(String[] args) { 
      launch(args); 
     } 
    } 

    class Browser extends Region { 

     final WebView browser = new WebView(); 
     final WebEngine webEngine = browser.getEngine(); 

     public Browser() { 

     getStyleClass().add("browser"); 
    webEngine.load("http://localhost:8080/ForthDynamicWebProject/FirstServlet"); 
     getChildren().add(browser); 
      } 
     } 
+1

私はこれを試したことはありませんが、Webログインフォームを作成するだけであれば、JavaFX Webビューで表示できます。フォームを送信すると、Webアプリケーションとまったく同じ方法で認証されます。 JavaFXアプリケーションから送信される後続の要求は、設定されているjsessionidクッキーを尊重し、要求を認証する必要があります。もう一度、私が言ったように、私はこれをやろうとはしたことはありませんが、私が試みる最初のアプローチになります。 –

+0

@James_Dありがとう、私は今夜それを試してみます。 – Rinat

+0

@James_Dブラウザからサーブレット(Chrome、IE)を呼び出そうとしたときに認証ウィンドウのポップアップが表示され、認証メカニズムが正常に動作しません。しかし、JavaFXウィンドウを開くと何も表示されません。 – Rinat

答えて

2

あなたのクライアントは、Webアプリケーションではありませんので、あなたはここで、標準のJava EEクッキー認証を使用しないでください: は、ここで私は失敗したログインウィンドウを開くために使用されるクラスのコード(のJavaFXのWebView)、です。

トークン認証ソリューションを使用できます。以下はガイドです。

  1. ログインサーブレットを作成します。このサーブレットは、userNameとパスワードを確認します。 okの場合、サーブレットはuserId、roles、expires ...を含むトークンを返します。JWT(Json Web Token)形式を使用できます。トークンは秘密鍵で生成/検証されます。

  2. JavaFX:ログインシーンを作成します。ログインボタンを押すと、アプリはログインサーブレットにログインチェック要求を送信します。ログインOKであれば、後で使用するためにトークンを秘密のストレージに保存する必要があります。メモリ内でOKである必要があります。

  3. JavaFX:その後のHTTPリクエストでは、アプリはトークンを再送する必要があります(ヘッダなどを介して)。 Java EEは、実際のリソースが呼び出される前に秘密鍵を使用してトークンを検証します。検証OKの場合、要求は認証されます。 Java EE Filterを使用してトークンを検証できます。

関連する問題