我有一个可以工作的 @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 应用程序时,我调用了这个端点。问题是axioshttp 客户端库将具有身份验证标头的get请求转换为选项请求,以探测服务器以进行实际访问。
现在我需要使用这个选项请求并为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 处理程序之前处理。我如何才能在 Spring MVC 中将 OPTIONS 处理程序放在其他处理程序之前?我希望它像拦截器一样
或者
实现所需行为的最佳实践方法是什么?我有点觉得我在破解一个更好的解决方案。