2016-04-26 4 views
0

Gibt es eine Möglichkeit, die Header der Preflight-Anforderung in Java Jersey zu kennen, oder gibt es eine Möglichkeit, unterschiedliche Antworten auf eine Preflight-Anfrage zu senden?Gibt es eine Möglichkeit, eine Preflight-Anfrage in REST API Jersey zu erkennen?

Angenommen Ich habe den folgenden Code:

@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; 
} 

nun zuerst der Browser eine Preflight-Anfrage senden. Gibt es einen Weg, wo ich die Antwort-Header für eine Preflight-Anfrage manipulieren kann?

Antwort

1

Sie können dies nicht in einer Ressourcenmethode tun, es sei denn, Sie möchten eine Reihe von @OPTIONS Methoden erstellen, da das Preflight eine OPTIONS-Anfrage ist. Stattdessen sollten Sie eine filter verwenden. Sie können eine Beispielimplementierung sehen here. Es ist nicht die beste Implementierung, da es nicht nach dem Preflight sucht, es sendet nur die CORS-Header für alle Anfragen. Wenn Sie sich den unteren Teil des Posts ansehen, wird eine Verknüpfung zu einer RESTEasy-Implementierung eines Filters hergestellt, um CORS zu behandeln. Es ist eine viel bessere Implementierung. Vielleicht möchten Sie das lernen, um ein paar Ideen zu bekommen

+0

Ja, ich habe @Option Methoden früher versucht, aber konnte nie diejenigen im Debugger erfassen, noch hat es irgendwelche Protokolle. Vielleicht habe ich etwas falsch gemacht. Aber ist das der einzige Weg? –

+0

Verwenden Sie einen Filter. Es ist deine beste Wette. –

+0

Gebrauchte auch die Filter. Aber hat das CORS-Problem nicht gelöst. War Chromium tragbar. Das funktioniert erst, nachdem die Websicherheit deaktiviert wurde. Aber das war nicht die beste Vorgehensweise, also versuchte ich eine bessere Lösung zu finden. –