springMVC解决跨域问题


前后端分离解决跨域问题的方法

 公司打算开一个新的项目,使用的是前后端分离开发。前端技术是Vue+element ui+Vue-router。后端采用SSM框架。因为原来的时候没有做过这个前后端分离。所以刚开始遇到了很多问题,第一个问题就是跨域问题。所以今天来介绍的就是跨域问题。这里因为JSONP只是支持get请求,所以直接考虑使用CORS

关于CORS的介绍

如今的JS大有一统天下的趋势,浏览器已经成了大多应用最好的安身之所。哪怕在移动端也有各种Hybird方案,在本地文件系统的Web页面,也有需要获取外部数据的需求,而这些需求也必然是跨域的。在寻找跨域解决方案时,发现了最优雅解决方案就是HTML5来带了的“Cross-Origin Resource Sharing”的新特性,来赋予开发者权力决定资源是否允许被跨域访问。
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-originresource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
为什么说它优雅呢?
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
解决这个问题的关键就落在了我这个负责后台的程序猿身上。
看看文档也不是什么难事嘛,就是需要在http头中设置Access-Control-Allow-Origin来决定需要允许哪些站点来访问。

作者:K_Biao 
源链接地址:https://www.imooc.com/article/7719

如何实现

在Controller类上声明一个CrossOrigin的注解,其中origins代表着能够访问的IP地址,*代表着所有的IP都可以访问。

@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping
(value = "user")
public class UserController {
    
@Autowired
    
private UserService userService;

    
@RequestMapping(value = "list",method = RequestMethod.POST)
    
public String getUserList(@RequestBody User user){
        
PageHelper.startPage(user.getPageNumber(),user.getPageSize());
       
List<UserusersuserService.getUserList(user);
       
PageInfo<UserpageInfo=new PageInfo<User>(users);
       
ResultInfo<UserresultInfo=new ResultInfo<User>(200,users,  pageInfo.getTotal());
       
return JSONObject.toJSONString(resultInfo);
    
}
}

 

在spring-mvc.xml配置文件中添加以下内容:

 
  

<mvc:cors>    <mvc:mapping path="/**" />mvc:cors>

或者是具体的IP地址:

       allowed-origins="http://domain1.com" />

因为是项目刚开,所以配置内容不是特别详细,等到之后又机会再次补充。



你可能感兴趣的:(springmvc)