2016-06-13 28 views
0

クライアントがjhipster生成Webアプリケーションに対してREST呼び出しを行うようにしたい。 そして私はそれをするために少し情報を誤っているようです。JavaでJhipster RESTクライアントを作成する

私が見つけたものはapplication.ymlにあります。私はcorsオプションを有効にする必要があります。 RESTが可能呼び出しを行う必要があります

jhipster: 
cors: #By default CORS are not enabled. Uncomment to enable. 
    allowed-origins: "*" 
    allowed-methods: GET, PUT, POST, DELETE, OPTIONS 
    allowed-headers: "*" 
    exposed-headers: 
    allow-credentials: true 
    max-age: 1800 

: ので、私は以下のコメント解除しました。

私はまた、これを有効にする必要があると思うが、私はよく分からない:

security: 
basic: 
    enabled: true 

私はこのような呼び出しを行うことができることを期待:

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; 
.... 
Client client = Client.create(); 
client.addFilter(new HTTPBasicAuthFilter("admin", "admin")); 
WebResource webResource = client.resource("http://localhost:8080/api/example"); 

しかし、私が得ます401.だから私は何かを欠いている?

ここに私の.yo-rc.jsonファイル:

{ 
"generator-jhipster": { 
"jhipsterVersion": "3.0.0", 
"baseName": "tinybotsWeb", 
"packageName": "nl.tinybots.web", 
"packageFolder": "nl/tinybots/web", 
"serverPort": "8080", 
"authenticationType": "session", 
"hibernateCache": "ehcache", 
"clusteredHttpSession": "no", 
"websocket": "no", 
"databaseType": "sql", 
"devDatabaseType": "mysql", 
"prodDatabaseType": "mysql", 
"searchEngine": "elasticsearch", 
"buildTool": "maven", 
"enableSocialSignIn": true, 
"rememberMeKey": "6799bca03613c99e29cd3c1bb7ac878157250d87", 
"useSass": false, 
"applicationType": "monolith", 
"testFrameworks": [ 
    "gatling", 
    "cucumber", 
    "protractor" 
], 
"enableTranslation": true, 
"nativeLanguage": "nl", 
"languages": [ 
    "nl", 
    "en", 
    "de" 
    ] 
} 
} 

私はSecuryConfigurationに以下を追加:

http 
     .csrf() 
     .ignoringAntMatchers("/basicAuthApi/**") 
... 
    .and() 
     .authorizeRequests() 
     .antMatchers("/basicAuthApi/**") 
     .hasAuthority(AuthoritiesConstants.BASIC_AUTH).and().httpBasic() 
... 

そして今、私は、要求を行うことができます。

私の質問は今です: 私はそれをやるべきですか? は安全ですか? はこの?:

security: 
    basic: 
    enabled: true 
+0

を使用して、RESTクライアントを生成する可能性があります。しかし、私はこれを動作させるつもりはありません。 – tibi

答えて

0

を何をやっている開発者向けオプションのブラウザを押しF12であなたのJhipsterアプリケーションを開きます。

ネットワークをチェックすると、あなたのjhipsterアプリがどの認証呼び出しを送信したか、どのようにそれらの呼び出しのヘッダーで送信するのかを確認してください。

Javaアプリケーションでこのプロセスをリバースエンジニアリングします。ここで

enter image description here

0

私は似ていると思う私の場合、溶液を実装する方法のsummarisation。実際の迅速なコードですが、間違っている可能性があるため、擬似コードとしてください。これはここに掲載ソリューションのコピーである、注意してください。Jhipster + REST client + authentication

  1. このような方法でコールバック(ブロック、または同等のもの)を渡して、あなたが呼び出す必要がどんなメソッドへの呼び出しを行い、成功してのための1のために失敗は

    func action(
        URLString:String, 
        method:Method, 
        encoding:Encoding = .JSON, 
        parameters:[String : AnyObject]?, 
        success:(statusCode:Int, responseObject:AnyObject)->Void, 
        failure:(statusCode:Int, error:NSError)->Void 
    ) 
    
  2. の中にあります。 /eventsあなたはステータスコードが401であるという、特定の失敗のケースを処理します。この特定のケースで

    if(r!.statusCode==ResponseCodes.HTTP_UNAUTHORIZED.rawValue){ 
    
        loginAndAction(URLString, method: method, encoding: encoding, parameters: parameters, success: success, failure: failure) 
    
    }else{ 
    
        failure(statusCode: response.response!.statusCode, error:response.result.error!) 
    
    } 
    
  3. 、代わりに結果を戻って、失敗のコールバックを呼び出すので、あなたが必要なパラメータの後に、元success()コールバックを受け入れ、login()メソッドを呼び出し

    func loginAndAction(
        URLString:String, 
        method:Method, 
        encoding: Encoding, 
        parameters:[String:AnyObject]?, 
        success:(statusCode:Int, responseObject:AnyObject)->Void, 
        failure:(statusCode:Int, error:NSError)->Void 
        )->Void 
    
  4. 認証が

var d:[String:AnyObject] = response.result.value as! [String:AnyObject] 
self.authToken = d["access_token"] as! String 

action(URLString, method: method,encoding:encoding, parameters: parameters, success: success, failure: failure) 
を成功した場合この時点で、メソッドアクションは適切な作業トークンを使用できます。

これは1日に1回(トークンの有効期限に基づいて)発生する必要があり、oauth2 refresh_tokenコールに適用可能なメカニズムです。 API /トークンを取得するために認証:

0

別の解決策は、それは私が最初のようなURLに対して認証する必要がある可能性がありgenerator-jhipster-swagger-cliモジュール

関連する問題