2016-04-26 18 views
0

Java Jerseyのプリフライトリクエストヘッダーを知る方法はありますか、プリフライトリクエストに異なる応答を送信する方法はありますか?REST API Jerseyでプリフライトリクエストを検出する方法はありますか?

と仮定私は、次のコードを持っている:

@Path("/releaseClient") 
@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public JSONObject releaseClient(JSONObject clientAndUser, @Context HttpServletRequest request) throws JSONException{ 
    int clientId = clientAndUser.getInt("id"); 
    String userId = clientAndUser.getString("user"); 
    JSONObject res = new JSONObject(); 

    // Check if profile is locked by current user and if so release profile 
    if(clientLockService.unlockClient(clientId, userId)){ 
     res.put("success", clientService.returnClientInfo(clientId)); 
    } else { 
    // If not then set error message 
     res.put("error", "Profile is not locked by current user"); 
    } 
    return res; 
} 

今最初のブラウザは、プリフライトリクエストを送信しますが。プリフライト要求のために応答ヘッダーを操作できる方法はありますか

答えて

1

@OPTIONSメソッドの束を作成しない限り、リソースメソッドでは実行できません。プリフライトはOPTIONS要求です。代わりにfilterを使用してください。実装例hereを見ることができます。それは実際にプリフライトをチェックしないので、すべての要求に対してCORSヘッダーを送信するだけなので、最大の実装ではありません。投稿の一番下を見ると、CORSを処理するフィルターのRESTEasy実装にリンクします。はるかに優れた実装です。

+0

はい、先ほどの@Optionメソッドを試しましたが、デバッガでそれらをキャプチャすることはできず、ログもありませんでした。私は何か間違ったことがあります。しかし、それは唯一の方法ですか? –

+0

フィルタを使用します。それはあなたの最善の策です。 –

+0

フィルターも使用しました。しかし、CORSの問題は解決しなかった。 Chromium portableを使用していました。 Webセキュリティを無効にした後でのみ動作するようにしました。しかし、これはベストプラクティスではなかったので、より良い解決策を見つけることができました。 –

関連する問題