方案一
在請求的方法或者Controller上加上@CrossOrigin
註解,如下
@CrossOrigin
@RequestMapping("attention")
public ResponseVO auditAttention(@Context HttpServletRequest request, @Context HttpServletResponse response) {
}
方案二
配置一個全局的跨域管理器
@Configuration
public class CORSConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
.allowCredentials(false).maxAge(3600);
}
};
}
}
其他嘗試過的無效的方案
方案1
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
response.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
方案2
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");
上面的方案或者上面方案的變體我嘗試過不下50次,依然無效,也不知道什麼原因,找了2天沒找到問題所在,總而言之就是配置了跟沒配置一樣,理論上如果你配置了,在響應的報文頭部會出現以下字樣
但我不管有沒有進行如下設置,響應頭依然是下面這樣的
總結
我嘗試過的就這幾種,單單說後臺好像還有其他的解決方案,但我沒有嘗試過,其他的需要前端配合的也有解決方案吧,比如jsonp。
參考:http://www.spring4all.com/article/177