使用ajax跨域请求时,后台无法获取到token
来源:互联网 发布:哪个炒股软件最好 编辑:程序博客网 时间:2024/05/19 13:58
背景:
项目前后端分离,前台页面使用ajax请求后端的api。
前端写法:
var token=”Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1MTAyNDEwMDAsInVzZXJJZCI6IsK_XHUwMDEywpbCi8KBwqhSwpjDp8KgU8KaXcKlwrDDryJ9.LuUr3I_eOOugcffmEhedc9wdWrOg5roY7WxREg1ddPpijDYLBlo5UWFYTgjnY2TWrYcN0MFkBODNYReOObYhiQ”;
$.ajax({
url: ‘http://IP或域名:8080/api/hello’,
beforeSend: function(request) {
request.setRequestHeader(“authorization”, token);
},
dataType: ‘JSON’,
async: false,//请求是否异步,默认为异步
type: ‘POST’,
success: function (data) {
},
error: function () {
}
});
后端控制器:
@CrossOrigin(origins = “*”, maxAge = 3600)
@RequestMapping(value = “/api/hello” )
public String hello(@RequestHeader(value = JwtUtil.USER_ID,defaultValue = “world”) String userID) {
return “hello ” + userID;
}
过滤器:继承了org.springframework.web.filter.OncePerRequestFilter
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
//下面一行代码,在跨域情况下token始终是null,不跨域的时候正常。
String token = request.getHeader(HEADER_STRING);
//省略无关代码…….
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
原因:
经多次测试发现 ,在跨域的情况下,发现每次客户端请求接口的时候,都会有一个 OPTIONS 请求。
解决:
在doFilterInternal方法中加入以下代码。如果是OPTIONS请求直接放过即可。
if ( httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name()) ) {
filterChain.doFilter(httpServletRequest,httpServletResponse);
return;
}
修改一下控制器注解 @RequestMapping(value = “/api/hello” ) 改成:
@RequestMapping(value = “/api/hello”,method = {RequestMethod.POST,RequestMethod.OPTIONS} )
- 使用ajax跨域请求时,后台无法获取到token
- ajax开发:在ajax请求后台时在请求标头RequestHeader加token
- ajax开发:在ajax请求后台时在请求标头RequestHeader加token
- ajax开发:ajax请求后台时在请求标头RequestHeader加token
- java使用axios.js的post请求后台时无法接收到参数的问题
- Ajax跨域请求后台无法识别session id的解决方式[withCredentials = true]
- Ajax readyState一直为1或无法请求到后台的问题处理
- 解决AJAX发送PUT和DELETE请求,后台无法接收到参数
- echarts图表动态获取后台数据详解(三)--ajax跨域请求
- SpringBind对象到页面时,用ajax提交form表单内容,后台无法获取绑定对象问题
- 解决Ajax请求时 无法获取最新数据
- ajax 后台无法读取到数据
- 解决:在使用JSONP跨域请求时.AJAX的dataFilter获取返回数据出现undifined
- ajax 请求 无法获取数据的问题
- element获取到后台的数据(ajax)
- sencha touch 使用Ajax请求ashx后台
- Jquery使用Ajax请求调用后台
- vue 使用 axios 发 post 请求,后台无法接收到数据
- 微服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
- java集合框架的练习之斗地主洗牌发牌的模拟(初级版)
- tunning-prime优化mysql建议
- maven deploy到nexus报错:Return code is: 401, ReasonPhrase:Unauthorized
- iframe session失效,跳转登录页面
- 使用ajax跨域请求时,后台无法获取到token
- 恢复git误操作删除的远程分支
- Nodejs中Log4js使用
- 数据结构—链表的操作小结
- 数组与字符串间转换
- xlistview上拉加载 下拉刷新
- Irrelevant Elements UVA
- python+selenium自动化测试之路Day5之浏览器的基本操作方法详解
- Java并发编程线程中:Callable、Future和FutureTask类