一般跨域请求访问时遇到的问题解决
前几天遇到一个特别傻的问题,看到浏览器所有的访问都是通过cookie控制权限的,我尝试在公司内跨域访问一个内部接口,接口名和请求参数都可以从浏览器访问时看到,于是就把在代码中设置cookie,添加要访问网页的token/user_token 但是添加后依然返回的是token not found ,当时我明明是传了token的,但是为什么访问不了 难道是公司内的系统配置了接口调用权限?
带着这个问题 我去百度查了一下 在后端代码访问跨域接口需要的就是网页的token ,但是cookie的信息不只token一个 还有domain和path,所以最终的代码是这样的
下面展示一些 内联代码片
。
JSONObject result = new JSONObject();
CookieStore cookieStore = new BasicCookieStore();
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultCookieStore(cookieStore)
.build();
try {
HttpPost post = new HttpPost(url);
// 添加参数
post.setEntity(new UrlEncodedFormEntity(pairList, "utf-8"));
// 设置cookies
BasicClientCookie cookie = new BasicClientCookie("token", token);
cookie.setDomain("10.20.18.100");
cookie.setPath("/");
cookieStore.addCookie(cookie);
// 通过请求对象获取响应对象
HttpResponse response = httpClient.execute(post);
// 拿到返回的对象(0--200都数正常)
result = JSON.parseObject(EntityUtils.toString(response.getEntity(), "utf-8"));
} catch (Exception e) {
e.printStackTrace();
}
return result;
如果不给cookie中存domain和path值,cookie会不知道去哪放token,导致识别不到。至于domain的含义,在这篇文章里写的非常全面
cookie的domain属性 .