折腾:
【未解决】vuejs中调用本地localhost的api报错:Access to XMLHttpRequest at from origin has been blocked by CORS policy
期间,去给spring boot的java后端加上CORS支持
java spring boot CORS
import org.springframework.web.bind.annotation.CrossOrigin;
好像只能允许http://localhost:9000的CrossOrigin
不能全部支持?
直接用:
@CrossOrigin
即可
@RestController @RequestMapping("/account") public class AccountController { @CrossOrigin @GetMapping("/{id}") public Account retrieve(@PathVariable Long id) { // ... }
另外可以全局Class级别加上CrossOrigin
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**"); } }
去找找
此处自己的WebConfig
- * 方式1:返回新的CorsFilter
- * 方式2:重写WebMvcConfigurer
- * 方式3:使用注解(@CrossOrigin)
- * 方式4:手工设置响应头(HttpServletResponse )
注:
CorsFilter / WebMvcConfigurer / @CrossOrigin 需要SpringMVC 4.2 以上的版本才支持
对应SpringBoot 1.3 版本以上都支持这些CORS特性
先去试试局部跨域是否有效
有空再试试 全局跨域
此处已有代码是:
@RequestMapping(path="/iec104") // This means URL's start with / (after Application path) public class IEC104Controller { private static Logger logger = LoggerFactory.getLogger(IEC104Controller.class.getName()); @Autowired // This means to get the bean called userRepository // Which is auto-generated by Spring, we will use it to handle the data private IEC104Repository iec104Repository; @PostMapping(path="/add") // Map ONLY POST Requests // public @ResponseBody String addNewIEC104 ( public @ResponseBody IEC104 addNewIEC104 ( // @RequestParam String data // @RequestParam String data, // @RequestParam String parseResult @RequestBody Map<String, Object> payload ) {
有前面提到的@Controller
去加上试试
import org.springframework.web.bind.annotation.CrossOrigin; @Controller // This means that this class is a Controller @CrossOrigin
然后重新编译
mvn clean package java -jar target/xxx-0.0.1-SNAPSHOT.jar
然后再去vuejs中测试,就可以了。
【总结】
此处给java的spring boot的后端添加CORS支持:
是给@Controller加上:@CrossOrigin
@Controller // This means that this class is a Controller @CrossOrigin @RequestMapping(path="/iec104") // This means URL's start with / (after Application path) public class IEC104Controller { ...
即可。
关于原理,详见:
转载请注明:在路上 » 【已解决】给java的spring boot中后端加上CORS支持