spring security认证axios请求时遇到的一个问题

382 阅读1分钟

问题

spring security使用jwt做认证,在发送请求时,在axios请求头里增加一个字段:

httpService.interceptors.request.use(
    config => {
        // token存在vuex里
        if (store.state.user.token) {
            config.headers['Access-Token'] = store.state.user.token;
          }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
)

但是后端没有办法获得Access-Token这个请求头字段,前端报CORS错。打开浏览器开发者工具,发现axios在发送真正需要的请求前还发送了一次OPTIONS请求。而后端没有处理这个请求的代码。

解决

如何处理这个请求呢? 在配置spring security时,通过HttpSecurity实例的cors()方法增加一个org.springframework.web.filter.CorsFilter就行了。

protected void configure(HttpSecurity httpSecurity) {
        httpSecurity.cors()
        //  以下省略
}

参考资料

  1. itbilu.com/javascript/…
  2. dev.to/kudzaitsapo…