NutzCN Logo
问答 跨域用了CrossOriginFilter还是报错
发布于 547天前 作者 qq_df433f5d 827 次浏览 复制 上一个帖子 下一个帖子
标签:

我的方法使用了CrossOriginFilter,还是报跨域的错误。

    @POST
    @Filters(@By(type= CrossOriginFilter.class, args={"*", "get, post, put, delete, options", "origin, content-type, accept, appid, token", "true"}))
    @AdaptBy(type=JsonAdaptor.class)
    @At("/products")
    @Ok("json:full")
    public Result getProducts(@Param("insType") String insType, HttpServletRequest req) {
        List<Ins_product> products = getProductsWithChannelRate(insType, "");
        return Result.success("", products);
    }

错误如下:

Access to XMLHttpRequest at 'http://localhost/api/v1/ins/products' from origin 'http://localhost:8088' has been blocked by CORS policy: Request header field appid is not allowed by Access-Control-Allow-Headers in preflight response.

我header里加了appid的呀,为什么没有效果?还需要其他的配置吗?

7 回复

改成

@At(value="/products", methods="OPTIONS")

添加了以后错误变成origin的了。

Access to XMLHttpRequest at 'http://localhost/api/v1/ins/products' from origin 'http://localhost:8088' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.

我是在本地开发机上,没有设置服务器代理什么的,我搜索都说设置了两次跨域,但是并没有。

翻了下老贴,把addheader改成setheader就好了。

但是我还是想了解下,为什么用加那个methods="OPTIONS"

options 是新加的服务器响应功能。
用于 chrome内核跨域功能设计。
浏器先发一个 options 到服务器
服务器如果返回支持。
那么再次发post 请求给服务器
服务器正常返回
chrome不再拦截返回值。

不要用localhost呀

添加回复
请先登陆
回到顶部