CAS 单点退出Filter加上后,
前台传json数据到后台,后台使用request.getInputStream()然后转字符串,
结果取不到。 ------------------------ 原因我知道,是退出Filter里从request取参数了,导致request流已经被解析,
流只能解析一次,所以无法再通过Stream的方式读取。 -------------------------- 最后的解决方法是:
$.ajax({ type: 'POST', url: '/form/', data: '{"name":"jonas"}', // or JSON.stringify ({name: 'jonas'}), success: function(data) { alert('data: ' + data); }, contentType: "application/json", dataType: 'json' });
前台ajax请求时,指定contentType为application/json即可。 -------------------------- 为什么这样可以? -------------------------- 在tomcat的Request.parseParameters方法里, 对于application/x-www-form-urlencoded是有做判断的, 对这种编码会去解析body里的数据,填充到parameters里, 所以后续想再通过流的方式读取body是读不到的(除非你没有触发过getParameter相关的方法)。 -------------------------- 简单的说,request.getParameter里面判断了content-type, 只有是application/x-www-form-urlencoded时才进行解析, 调用后,后面就无法再次读取流了。
如果变成了application/json什么的,也就没事了,即使用了getParameter方法,也没影响。
|