我在前端发起了不同的请求,为什么会出现在后端有的接口能拿到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,
但是在后端的拦截器中,search请求能够拿到token,post却不能取到。
search:
post:
莫名奇妙的出现了错误
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);
}
);
回答:
根据后端的报错,你试下把 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 的情况
}
}
以上是 我在前端发起了不同的请求,为什么会出现在后端有的接口能拿到token,有的拿不到? 的全部内容, 来源链接: utcz.com/p/934042.html