CORS:对预检请求的响应未通过访问控制检查:预检请求不允许重定向

Posted

技术标签:

【中文标题】CORS:对预检请求的响应未通过访问控制检查:预检请求不允许重定向【英文标题】:CORS : Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request 【发布时间】:2019-10-28 02:40:56 【问题描述】:

我正在尝试将 angualar js 应用程序与后端 spring boot 集成,其中我面临的重定向不允许预检请求

这部署在 openshift 上,我已经通过在控制器方法中添加一些注释来配置启用 cors,这帮助我解决了: 请求在传入请求中没有“Access-Control-Allow-Origin”标头:CORS 政策问题。

    @CrossOrigin(allowedHeaders = "*", origins = "*", exposedHeaders = 
        "Access-Control-Allow-Origin", methods = 
          RequestMethod.POST, RequestMethod.GET, RequestMethod.PUT, 
    RequestMethod.DELETE, RequestMethod.HEAD,
          RequestMethod.OPTIONS, RequestMethod.PATCH, RequestMethod.TRACE )
    @RestController
    public class Controller 

   @Autowired
   Service botService;

   @Autowired
   Environment env;

   @CrossOrigin()
   @RequestMapping(value = "/jwtToken", method = 
                 RequestMethod.POST , produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
   @ResponseStatus(HttpStatus.OK)
   public ResponseEntity<UnifiedService> botConntor(                     
                 @RequestBody UnifiedInput input, HttpServletRequest request) 
          UnifiedBPMService output = botService.processBotRequest(input, request);
          return new ResponseEntity<UnifiedService>(output, HttpStatus.OK);
   

我在实际的角度应用程序中得到的错误是:

从 'http:///chatbot/api/jwtToken' 访问 XMLHttpRequest 来源“http://”已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:重定向未通过 允许预检请求。

选项调用返回了以下响应:

    Request URL: http://<domain>/chatbot/api/jwtToken
    Request Method: OPTIONS
    Status Code: 302 Found
    Remote Address: 10.235.222.220:80
    Referrer Policy: no-referrer-when-downgrade

【问题讨论】:

您可以尝试添加 @CrossOrigin(origins = "*" , maxAge = 4800, allowCredentials = "false") 但 origins 应该是 * 并删除暴露的标头 @AhmadQureshi :建议的更改无助于解决问题。我仍然得到同样的错误 你可以尝试从方法级别删除@CorsOrigin @AhmadQureshi :已删除,但仍然是同样的问题 【参考方案1】:

您的后端正在重定向 (302),而不是向 OPTIONS/preflight 请求发送正确的响应 (200)。检查您的后端日志,看看它为什么会重定向。可能类似于 Spring security 拒绝 OPTIONS 请求并重定向到您的登录页面。

【讨论】:

我也面临同样的问题,但后端日志根本没有任何数据。 我也面临同样的问题。使用 SSO 服务器时,需要在服务器端进行重定向,而不是发送403 我不确定这是否会有所帮助,但在这种情况下,Spring 安全日志记录通常非常少。我总是要做的第一步是启用调试日志记录。试试-Dlogging.level.org.springframework.security=DEBUG

以上是关于CORS:对预检请求的响应未通过访问控制检查:预检请求不允许重定向的主要内容,如果未能解决你的问题,请参考以下文章

CORS:对预检请求的响应未通过访问控制检查

CORS 问题 - 对预检请求的响应未通过访问控制检查:

OAuth 中的 CORS:对预检请求的响应未通过访问控制检查

cors(cors 策略:对预检请求的响应未通过访问控制检查)角度 7 中的错误

角 POST 请求被 CORS 策略阻止:对预检请求的响应未通过访问控制检查

在 node/express 中启用了 CORS,但得到“对预检请求的响应未通过访问控制检查”