【发布时间】:2018-09-24 16:51:13
【问题描述】:
我正在尝试通过 JWT 令牌保护我的 Web 应用程序,但是当我尝试从我的 Angular 应用程序 (localhost:4200) 向我的 Spring Boot 应用程序 (localhost:8080) 发出请求时,我收到以下错误:
仅从消息中我可以看出这是一个CORS 问题,问题是我已经在后端启用了来自不同来源的请求,这里是它的代码:
更新:我已将 OPTIONS 添加到 allowedMethods(),但错误仍然相同。
@Configuration
public class AppConfiguration {
@Autowired
private Environment env;
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:4200")
.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD","OPTIONS")
.allowedHeaders("Content-Type", "Date", "Total-Count", "loginInfo")
.exposedHeaders("Content-Type", "Date", "Total-Count", "loginInfo")
.maxAge(3600);
}
};
}
这也是我的 Angular 应用程序的代码:
baseUrl = 'http://localhost:8080/api/';
constructor(private http: Http) { }
private postaviHeadere() : RequestOptions{
let headers = new Headers();
console.log("***************** Set Headers *****************");
console.log('Getting token from local storage:');
console.log(localStorage.getItem('jwt_token'))
console.log("***********************************************");
headers.append('JWT_TOKEN', localStorage.getItem('JWT_TOKEN'));
let options = new RequestOptions({headers : headers});
console.log(options);
return options;
}
getUserByToken(): any {
return this.http.get(this.baseUrl + 'user/secured', this.postaviHeadere())
}
【问题讨论】:
-
您还应该添加
OPTION。应该像.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTION") -
执行选项请求时会收到 403。您能否显示该请求的响应标头/正文(如果有)。选项是否在网络服务器级别启用?
标签: java spring angular spring-boot spring-security