前提
- 前后端分离的B/S架构系统
- 前后端独立开发,后端采用JBoss restEasy 框架搭建restful服务
- 后端代码开发完成并且部署在某一台测试机上
- 前端开发过程中,需要本地调试代码,并且后端服务不在本机上而是在测试机上的时候会出现浏览器跨域请求的问题
- 后端已经添加拦截器并且在拦截器中配置了allowedOrigins, allowedMethods, allowCredentials等参数
解决方式
- 浏览器在发送跨域请求时候,一般会先发送OPTIONS请求检验请求资源是否可以获取
- 后端服务需要定义处理options请求方法的接口
- 因此需要在rest api中定义options处理的接口, 该接口检测并响应@Path(“/{path:.*}”)的所有请求路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19/**
* 跨域请求发送options请求时候进行处理
*
* @param requestMethods
* @param requestHeaders
* @return
* @throws Exception
*/
@OPTIONS
@Path("/{path:.*}")
public Response handleCORSRequest(@HeaderParam("Access-Control-Request-Method") final String requestMethods,
@HeaderParam("Access-Control-Request-Headers") final String requestHeaders) throws Exception {
Response.ResponseBuilder builder = Response.ok();
if (requestHeaders != null)
builder.header("Access-Control-Allow-Headers", requestHeaders);
if (requestMethods != null)
builder.header("Access-Control-Allow-Methods", requestMethods);
return builder.build();
}