CORS过滤在“授权”标头中不起作用[重复]

Posted

技术标签:

【中文标题】CORS过滤在“授权”标头中不起作用[重复]【英文标题】:CORS filtering not working in 'Authorization' header [duplicate] 【发布时间】:2019-01-31 11:09:37 【问题描述】:

我正在尝试在 spring mvc 应用程序中添加 OAuth 2.0。用户应该经过身份验证才能获得 api 调用。我在spring mvc控制器中设置了一个标题:

@RequestMapping(value = "/admin-api/get-all-order", method = RequestMethod.GET)
    public ResponseEntity getAllOrders(@RequestHeader("Authorization") String bearerToken) 
        try 
            List<OrderModel> order = orderService.getAllOrders();
            return new ResponseEntity(order, HttpStatus.OK);
         catch (HibernateException e) 
            return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
        
    

对于请求 api,我使用了 angular 5。我使用 angular 进行 api 调用,例如:

return this.http.get<T>(this.getAllOrderUrl, 
            headers: 
                "Authorization": "bearer " + JSON.parse(localStorage.getItem("token"))["value"],
                "Content-type": "application/json"
            
        ).catch(error => 
            return this.auth.handleError(error);
        )

我已经为“localhost:4200”启用了 CORS。 CORS 过滤适用于其他请求。

@Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException 
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods",
                "ACL, CANCELUPLOAD, CHECKIN, CHECKOUT, COPY, DELETE, GET, HEAD, LOCK, MKCALENDAR, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, SEARCH, UNCHECKOUT, UNLOCK, UPDATE, VERSION-CONTROL");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers",
                "X-PINGOTHER,Content-Type,X-Requested-With,Accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Key");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) 
            response.setStatus(HttpServletResponse.SC_OK);
         else 
            chain.doFilter(req, res);
        
    

如果我在邮递员中尝试过,它会给我一个想要的结果

**响应标头** 我究竟做错了什么?请帮帮我。希望得到积极的回应谢谢!

【问题讨论】:

你在CorsFilter中的接线如何 @shinjw - 对不起,我没有得到你 您需要在 WebSecurity 或 ResourceServer 配置器中设置 CorsFilter。您需要发布这些配置 【参考方案1】:

尝试改变:

    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) 
        response.setStatus(HttpServletResponse.SC_OK);
     else 
        chain.doFilter(req, res);
    

chain.doFilter(req, res);

响应可能会被包装并在标头中插入更多属性以确保 CORS 正常工作。 如果您在此处进行了测试,则可能无法正常工作。 如果它不起作用,您可以尝试并在 xml 或注释中发布有关您的 CORS 配置的更多信息。 希望有所帮助。

【讨论】:

以上是关于CORS过滤在“授权”标头中不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CORS 标头在 MEAN 堆栈应用程序中不起作用

使用 CORS 标头时,$.get 在 IE 中不起作用

授权标头在获取中不起作用 - React Native

使用 CORS 的应用程序在 Azure 中不起作用

CORS 过滤器在我的 Java 应用程序中不起作用

标头位置在 PHP 中不起作用 [重复]