Java-CORS解决跨域问题

摘要

最近几年,采用前后端分离开发的项目很是常见。由于前后端分离后,可能会放在两个不同的服务器,需要独立部署,两个不同的工程,两个不同的代码库,不同的开发人员,挂靠不同的域名,因此也存在了跨域的问题。

在开始解决这个问题之前先了解一下什么是CORS跨域资源共享):

跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器  让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。

 

Java代码

下面使用CORS中最常见最方便的方法:

CORS类

public class CORS{
    public void CORSTool(HttpServletResponse response, HttpServletRequest request){
    	// 设置:Access-Control-Allow-Origin头,处理Session问题
    	response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
    	response.setHeader("Access-Control-Allow-Credentials", "true");
    	response.setHeader("P3P", "CP=CAO PSA OUR");
        if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
        	response.addHeader("Access-Control-Allow-Methods", "POST,GET,TRACE,OPTIONS");
        	response.addHeader("Access-Control-Allow-Headers", "Content-Type,Origin,Accept");
       		response.addHeader("Access-Control-Max-Age", "120");
    	}
    }
}

调用CORS的方法,举例如下

@RequestMapping("/selectOne")
@ResponseBody
public Map<String,Object> selectOne(HttpServletResponse response, HttpServletRequest request){
    Cors cors=new Cors();
    cors.corsInfo(response,request);
    Map<String,Object> map=new HashMap<>();
    Notice list = noticeService.selectNoticeById(noticeId);
    map.put("data",list);
    return map;
}

前端代码

<input type="button" id="list" value="查询">
<script>
    /* cors测试 */
    $("#list").click(function(){
        $.ajax({
            url:"http://localhost:8080/abc/selectOne",
            type:"GET",
            dataType:"json",
            success: function(data){
                alert("名字:"+data.name);
            },
            error: function(){
                alert("服务器异常");
            }
        });
    });
</script>

最后

使用CORS简单请求,对于前端来说无需做任何配置,与发送普通ajax请求无异。CORS的配置,完全在后端设置,配置起来也比较容易,目前对于大部分浏览器兼容性也比较好,CORS优势也比较明显,可以实现任何类型的请求。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值