使用路径变量时错误 CORS Forbidden 403 Spring Boot With Spring Security

Error CORS Forbidden 403 Spring Boot With Spring Security when using Path Variable

我知道已经有很多关于这个主题的问题和答案,但是 none 在使用路径变量时提到这个错误。

我已经把这个配置

@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception
   {
    http
     .cors().and()
     .csrf().disable()
     .authorizeRequests().antMatchers("/file/getFile/**")           
        .permitAll().anyRequest().authenticated()
     .and()
     .httpBasic();
   }
}

当我使用路径变量时,响应总是错误 403 Forbidden。

错误

@RequestMapping(value = "/file")
@Service
public class FileService {
 .....
    @CrossOrigin(origins="http://localhost:8080", allowCredentials = "true")
    @RequestMapping(value = "/getFile/{fileId}", method = RequestMethod.POST)
    @ResponseBody
    public String getFile(@PathVariable(value = "fileId") String fileId) {
         ....
    }
}

但如果我不使用路径变量,它就可以工作。

成功

@RequestMapping(value = "/file")
@Service
public class FileService {
 .....
    @CrossOrigin(origins="http://localhost:8080", allowCredentials = "true")
    @RequestMapping(value = "/getFile", method = RequestMethod.POST)
    @ResponseBody
    public String getFile(@RequestBody String jsonFileId) {
         ....
    }
}

我是从 javascript 调用的,下面是 javascript 请求方法。 url 例子

 http://localhost:8088/file/getFile/PUML1pZvusTlfBnlW3 
 fdjElEw8O7iVXfj801GyFF7fWeqyvPzwf1GB9lwha3T9GOoq2KEDaqf01l
 3DMRYInV9yHAMfd5_W4vY0S7d0SS9qk

和请求方式

 $.ajax({
           
            url:url,
            type:"POST",
            data:data,
            dataType: 'json',
            contentType: "application/json;",
            crossDomain:true,
            cache:false,
            async:true,
            success:success,
            timeout:30000,
            error:function(xhr, textStatus, errorThrown) {
                console.log(xhr.responseText);                
             
            }   
                
        }
    });

javascript 错误:

Access to XMLHttpRequest at

'http://localhost:8088/file/getFile/PUML1pZvusTlf....
from origin 'http://localhost:8080' has been blocked by CORS 
policy: Response to preflight request doesn't pass access control 
check: No 'Access-Control-Allow-Origin' header is present on the 
requested resource.

我知道我可以不用路径变量,但在我的情况下使用路径变量更有效。 那么这个问题有什么解决办法吗?谢谢

当您使用路径变量时,没有 POST body 并且浏览器不会发送 application/json Content-Type header。您的控制器端点不匹配,并且服务器不会以 Access-Control-Allow-Origin header 响应预检请求。尝试在 POST body.

中发送一些值