技术:spring mvc 跨域
运行环境:spring mvc+ win7
demo功能:提供一个spring mvc支持跨域请求
1.js发出请求, 请求app嵌入的浏览器
2.嵌入浏览器访问真正的服务。
(在访问前, 会先发一个option请求, 询问真正的服务是否支持跨域。 如果支持, 就再次请求。 服务端在收到询问请求时,
告诉浏览器支持, 并且告诉浏览器在跨域请求可以在多久中是有效的, 不用再次发送询问请求, 而是直接访问)
3. 所以对于js而言, 就是跨域了。
在拦截器中添加支持
如果是询问请求, 返回204, 允许
allowCSRFRequest(request, response);
if (RequestMethod.OPTIONS.name().equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpStatus.NO_CONTENT.value());
return false;
}
if (response.getStatus() != 302) {
String allowOriginConfig = "null|http://localhost";
String[] allowOrigins = allowOriginConfig.split("\\|");
String requestOrigin = request.getHeader("Origin");
if (org.apache.commons.lang.StringUtils.isEmpty(requestOrigin)) {
requestOrigin = "null";
}
if (allowOrigins == null || allowOrigins.length == 0) {
response.addHeader("Access-Control-Allow-Origin", "*");
} else if (Arrays.asList(allowOrigins).contains(requestOrigin)) {
response.addHeader("Access-Control-Allow-Origin", requestOrigin);
} else {
response.addHeader("Access-Control-Allow-Origin", Arrays.asList(allowOrigins).get(allowOrigins.length - 1));
}
response.addHeader("Vary", "Accept-Encoding");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
response.addHeader("Access-Control-Expose-Headers", "Content-encoding, Vary");
response.addHeader("Access-Control-Max-Age", "60"); //单位, 秒,在这么多秒内,不用再次询问是否支持跨域
}
拦截器部分截图
欢迎添加微信,互相学习↑↑↑ -_-
白老虎
programming is not only to solve problems, ways to think
grafana 级连 菜单 templating (variables) 配置
rocketmq 集群搭建 (2master + 2slave + 2namesrv)
AI 机器人 抓取 微信 聊天中的 百度网盘 分享地址和密码