【发布时间】:2019-09-17 05:58:09
【问题描述】:
我有一个可以工作的 @RestController 组件,它产生 API Web 端点。
这是其中一个端点
@CrossOrigin
@GetMapping(API_VERSION + PLAYER + METHOD_FETCH + "/{uid:^[0-9]*$}")
public Player fetchPlayer(@PathVariable("uid") String uid) {
return mongoTemplate.findById(uid, Player.class);
}
现在,当使用我的 Vue.js 应用程序时,我调用了这个端点。问题是axios http 客户端库将具有身份验证标头的 get 请求转换为 options 请求以探测服务器以进行实际访问。
现在我需要使用这个 options 请求并为 CORS 启用它。因此,我做了以下事情:
@RestController
@Log
@RequestMapping("/**")
public class AuthenticationEndpoint {
@CrossOrigin
@RequestMapping(method = RequestMethod.OPTIONS)
public void handleOptionRequest(){
log.info("option request handled");
}
}
我将它映射到每个 url,因此它“应该”拦截每个 OPTIONS 请求。但事实并非如此。当有一个
GET http://{{host}}:80/api/v0.1/player/fetch/4607255831
Authorization: Basic MTIzNTM2NDMyNDphYmMxMjM=
更具体的 API Web 端点在 OPTIONS 处理程序之前处理。 我如何才能将 OPTIONS 处理程序放在 Spring MVC 中的其他处理程序之前? 我希望它像拦截器一样工作
或
实现所需行为的最佳实践方式是什么?我觉得我正在寻找更好的解决方案。
【问题讨论】:
标签: java spring-boot request cors