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

KaM*_*MaL 5 java same-origin-policy cors openshift spring-boot

我正在尝试将 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);
   }
Run Code Online (Sandbox Code Playgroud)

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

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

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

    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
Run Code Online (Sandbox Code Playgroud)

Jul*_*ius 0

您的后端正在重定向 (302),而不是向 OPTIONS/预检请求发送正确的响应 (200)。检查您的后端日志以了解其重定向的原因。这可能类似于 Spring security 拒绝 OPTIONS 请求并重定向到您的登录页面。