我有一个 Angular 应用程序,可以对 Api 进行 httpClient.get() 调用。 我用 SpringBoot 开发了该 api,它应该返回一个 json。 我在每个方法上设置了@CrossOrigins(*),当我尝试调用部署在我用于测试的Weblogic服务器上的Api版本时,它起作用了。 无论如何,现在相同的 Api 部署在另一个需要基本身份验证的 Weblogic 服务器上。 如果我尝试调用部署在新服务器上的 Api,并使用基本身份验证标头进行设置,它会给我这两个错误,就像它发出两个不同的调用一样
当我不放置任何身份验证标头时,它显然只返回 401 身份验证失败。 所以我不认为这取决于身份验证标头。
无论如何,为了确定这一点,我尝试从另一个 SpringBoot 应用程序进行相同的调用,使用相同的身份验证标头进行设置,并且它正确返回 json。
我真的没有任何线索。 无论如何,这就是我通过身份验证拦截器设置调用的方式:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(environment.authentication){
req = req.clone({
setHeaders: {
'Content-Type' : 'application/json; charset=utf-8',
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Authorization': `Basic ${btoa(environment.user+ ':'+ environment.password)}`,
},
}); }
else req = req;
return next.handle(req);}
我检查了第一个请求(带有 500 的请求),btoa 标头与从 java 或浏览器发送的请求相同。 请建议我这可能是什么...
错误可能出现在您的后端,请确保您“禁用”CORS
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
}
}
如果这不起作用,请分享您的 java 代码。