2017-11-03 1 views
4

클라이언트 측 JavaFX, 서버 측 JavaEE/Glassfish 및 데이터베이스 관리 시스템 인 MySQL을 사용하여 3 계층 응용 프로그램을 개발합니다. 또한 REST와 JSON을 사용하여 네트워크를 통해 데이터를 전송했습니다. 이제 JavaEE 보안 수단을 사용하여 인증을 구성하려고합니다. Enterprise Bean에서 어노테이션을 사용하여 선언적 접근 방식을 사용하고 있습니다. 글래스 피어 파일 영역 (사용자/그룹 추가)과 glassfish-web.xml 서술자 (그룹 이름과 역할 태그 추가)를 이미 구성했습니다. JavaEE 자습서에 따르면 클라이언트가 보호 된 리소스를 얻으려고 할 때 필요한 모든 준비가 완료되면 Glassfish는 클라이언트에게 로그인/비밀번호 쌍을 요청해야합니다. 웹 클라이언트라면 어떻게 작동하는지 알고 있지만 내 경우에는 데스크톱 JavaFX 클라이언트이고 Glassfish가 데스크톱 응용 프로그램에서 클라이언트에게 묻는 방법을 이해하지 못합니다. JavaFX-Glassfish로 인증 메커니즘을 만드는 방법. 도와주세요.JavaEE에서 JavaFX 클라이언트를 인증하는 방법

업데이트 브라우저 (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

웹 로그인 양식을 만들면 JavaFX 웹보기로 표시 할 수 있습니다. 그런 다음 양식을 제출하면 웹 애플리케이션과 동일한 방식으로 인증됩니다. 그런 다음 JavaFX 응용 프로그램에서 보낸 후속 요청은 설정된 jsessionid 쿠키를 존중해야하며 요청은 인증되어야합니다. 다시 말했듯이, 나는 이것을 해보려 고 본 적이 없지만 시도하려는 첫 번째 방법이 될 것입니다. –

+0

@James_D 감사합니다. 오늘 저녁에 시험해 보겠습니다. – Rinat

+0

@James_D 브라우저 (Chrome, IE)에서 서블릿을 호출하려고하면 인증 창이 팝업되고 인증 메커니즘은 작동하지 않습니다. 하지만 JavaFX 창을 열면 아무 것도 볼 수 없습니다. – Rinat

답변

2

클라이언트가 웹 응용 프로그램이 아니기 때문에 현재 표준 Java EE 쿠키 인증을 사용하지 않아야합니다 : 는 여기에 내가 실패 로그인 창을 여는 데 사용되는 클래스의 코드 (자바 FX의 웹보기)입니다.

토큰 인증 솔루션을 사용할 수 있습니다. 아래는 가이드입니다.

  1. 로그인 서블릿을 작성하십시오. 이 서블릿은 userName과 password를 확인합니다. 괜찮 으면 서블릿은 userId, roles, expires ...가 포함 된 토큰을 반환합니다. JWT (Json Web Token) 형식을 사용할 수 있습니다. 토큰은 비밀 키로 생성/검증됩니다.

  2. JavaFX : 로그인 장면을 작성하십시오. 로그인 버튼을 누르면 앱은 로그인 서블릿에 로그인 확인 요청을 보냅니다. 로그인 확인을하면 나중에 사용할 수 있도록 비밀 저장소에 토큰을 저장해야합니다. 메모리에 괜찮을 것입니다.

  3. JavaFX : 후속 HTTP 요청의 경우 앱이 헤더 등을 통해 토큰을 다시 보내야합니다. Java EE는 실제 자원이 호출되기 전에 비밀 키를 사용하여 토큰의 유효성을 검사합니다. 유효성 검사가 정상이면 요청이 인증됩니다. Java EE Filter를 사용하여 토큰의 유효성을 검사 할 수 있습니다.

관련 문제