Java 有没有办法在RESTAPI中检测飞行前请求?

Java 有没有办法在RESTAPI中检测飞行前请求?,java,rest,jersey,cors,chromium-portable,Java,Rest,Jersey,Cors,Chromium Portable,有没有办法知道JavaJersey中的飞行前请求头,或者有没有办法对飞行前请求发送不同的响应 假设我有以下代码: @Path("/releaseClient") @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public JSONObject releaseClient(JSONObject clientAndUser, @Context HttpServletRequest

有没有办法知道JavaJersey中的飞行前请求头,或者有没有办法对飞行前请求发送不同的响应

假设我有以下代码:

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

现在,浏览器将首先发送飞行前请求。是否有一种方法可以操作飞行前请求的响应头?

除非您想创建一组
@OPTIONS
方法,否则不能在资源方法中操作,因为飞行前是一个选项请求。相反,你应该使用。您可以看到一个示例实现。这并不是最好的实现,因为它实际上并不检查飞行前,它只是发送所有请求的CORS头。如果您查看本文的底部,它将链接到一个RESTEasy实现的过滤器来处理CORS。这是一个更好的实现。您可能希望研究该方法以获得一些想法

是的,我之前尝试过@Option方法,但在调试器中无法捕获这些方法,也没有任何日志。可能是我做错了什么。但这是唯一的方法吗?使用过滤器。这是你最好的选择。也使用了过滤器。但没有解决CORS问题。正在使用铬便携式。只有在禁用网络安全后才能使其工作。但这并不是最佳实践,因此尝试找到更好的解决方案。您可能需要在servlet级别处理它。尝试编写一个servlet过滤器。好吧,也许得试试。Javascript中没有可以处理此问题的方法。这使生活更加困难。