[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]CAS 单点退出Filter,CAS Client SingleSignOutFilter导致request.getInputStream()取不到的问题

上一篇:[备忘]分析网页打开速度的网站
下一篇:[备忘]java里new URL里直接写中文,貌似是按系统编码直接转的~

添加日期:2015/4/18 17:07:56 快速返回   返回列表 阅读4597次
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方法,也没影响。
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved