下面是详解"SpringMVC解决跨域的两种方案"的完整攻略。
一、什么是跨域
跨域是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是Web应用程序中常见的安全漏洞。
二、为什么需要解决跨域
因为现在Web开发中使用的是前后端分离,分别使用不同的域名访问,一般情况下都会涉及到跨域问题。
三、SpringMVC解决跨域的两种方案
1、使用@CrossOrigin注解
在需要使用跨域的Controller类或者方法上添加@CrossOrigin注解。
示例一:
@RestController
@RequestMapping("/example")
public class ExampleController {
@CrossOrigin(origins = "http://www.example.com") //指定允许跨域的域名
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
以上示例中,指定了允许跨域请求的域名为 http://www.example.com,只有当请求来自该域名时才允许跨域请求。
示例二:
@RestController
@RequestMapping("/example")
@CrossOrigin(origins="*",allowedHeaders="*",allowCredentials="true")
public class ExampleController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
以上示例中, 表示允许任何来源的请求跨域访问,allowedHeaders="" 表示允许任何头信息,allowCredentials="true" 表示允许带有身份认证信息的请求跨域访问。
2、使用HttpServletResponse设置响应头
在需要跨域访问的Controller中使用HttpServletResponse设置响应头。
示例:
@RestController
@RequestMapping("/example")
public class ExampleController {
@GetMapping("/hello")
public String hello(HttpServletResponse response) {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
response.setHeader("Access-Control-Allow-Credentials", "true");
return "Hello, World!";
}
}
以上示例中,将Access-Control-Allow-Origin设置为 *,表示允许任何来源的请求跨域访问;Access-Control-Allow-Methods设置为POST、GET、OPTIONS和DELETE表示允许这些方法的请求跨域访问;Access-Control-Allow-Headers设置为x-requested-with和content-type表示允许这些请求头的请求跨域访问;Access-Control-Allow-Credentials设置为true表示允许带有身份认证信息的请求跨域访问。
四、总结
以上就是SpringMVC解决跨域的两种方案,总结一下,使用@CrossOrigin注解比较简单,而使用HttpServletResponse设置响应头比较灵活。而具体使用哪种方式需要结合实际的业务需求来考虑。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringMVC解决跨域的两种方案 - Python技术站