我在前端发起了不同的请求,为什么会出现在后端有的接口能拿到token,有的拿不到?

我在前端发起了两个请求,分别为:

onMounted(() =>{
  loginAxios.post("/search/all",{})
    .then((res: any) =>{
      articleList.value =  res.data.postList;
    })
})
// 处理表单提交逻辑
  loginAxios.post("/post/add", {})
    .then((res: any) =>{
      console.log(res);
    })
    };

两者都通过请求拦截器携带了token,
image.png

但是在后端的拦截器中,search请求能够拿到token,post却不能取到。
search:
image.png
post:
image.png

莫名奇妙的出现了错误

Cannot cast 'org.apache.catalina.core.ApplicationHttpRequest' to 'org.apache.catalina.connector.RequestFacade'

拦截器:


@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Resource
    StringRedisTemplate stringRedisTemplate;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .excludePathPatterns(
                        "/user/login",
                        "/search/all"

                ).order(1);
        //order设置优先级,越小优先级越高
        registry.addInterceptor(new RefreshTokenInterceptor(stringRedisTemplate)).addPathPatterns("/**").order(0);
    }
}

在优先级为o的拦截器中取的token.

前端拦截器:

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 在请求头中添加token
    const token = sessionStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);
阅读 1.9k
1 个回答

根据后端的报错,你试下把 org.apache.catalina.core.ApplicationHttpRequest 对象强制转换为 org.apache.catalina.connector.RequestFacade 对象。这两个类没有共同的子类,所以你没办法直接将它们相互转换。你可能想要访问底层的 HttpServletRequest 对象。如果是这种情况,你可以试以下方法:
你在 Servlet 中,可以直接使用 HttpServletRequest:


import javax.servlet.http.HttpServletRequest;
// ...
public void doGet(HttpServletRequest request, HttpServletResponse response) {
    // 使用 request 对象
}

如果你在其他地方需要访问 HttpServletRequest,你可以试以下方法:

import javax.servlet.http.HttpServletRequest;
// ...
public void someMethod(Object request) {
    if (request instanceof HttpServletRequest) {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        // 使用 httpRequest 对象
    } else {
        // 处理不是 HttpServletRequest 的情况
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题