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 selectOne(HttpServletResponse response, HttpServletRequest request){
    Cors cors=new Cors();
    cors.corsInfo(response,request);
    Map map=new HashMap<>();
    Notice list = noticeService.selectNoticeById(noticeId);
    map.put("data",list);
    return map;
}

前端代码


最后

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

你可能感兴趣的:(java)