webwork+cas认证在表单提交后乱码问题解决心得

给一个webwork项目加上cas认证的时候遇到了个常见的问题.乱码!
具体表现是:
1. 表单提交之后,就会出现乱码,数据到action里面的时候已经是乱码,存入数据库也是乱码,
最后在页面显示的时候,当然也是乱码!
2. 对于本来在数据库里面不是乱码的数据,在页面上显示一切正常.
3. 对于url 问号后面的参数,因为我有对这些参数做了编码处理,所以这种类型的参数没有乱码现象.

解决过程以及思路:
1. 由于该项目开始编码的时候,就已经统一了开发环境, 编辑器的编码也都统一为gb2312,页面编码也统一为gb2312;
但是后来新加进了两位开发人员,大家由于比较忙,没有跟新来人员约定好编辑器编码模式. 起初以为是因为编辑器编码不同,导致出现乱码问题,所以去查看了myeclipse对jsp的编码,发现没有任何问题.

2. 由于该项目采用框架是 webwork2.1.6 + hibernate2 ,表单提交的时候用的是model-driven模式,页面上的form提交方式为"post",表单提交后,封装成vo对象时出现了乱码.
这时就怀疑是webwork的 webwork.properties文件的区域和编码设置可能和编码过滤器encodingFilter冲突了,
因为webwork2.1.6 的编码过滤器对于webwork的自动封装不起作用,所以把编码过滤器注释掉,再次运行,结果问题依旧.
于是又反过来,把webwork.properties的编码设置注释掉,甚至webwork.properties的编码设置和编码过滤器同时注释掉,都不能解决问题..但并没有引发其他编码问题,问题依旧是表单提交,webwork把页面数据封装成数据实体的时候出现乱码.

3. 于是上网搜了下资料,无非是修改webwork.properties文件,编码过滤器, 还有就是在tomcat的server.xml文件里面加上URIEncoding="gb2312" 之类的,几乎所有方法都试过,问题还是不能解决.
再也想不出别的方法了,于是决定自己写一个ServletDispatcher,在这里面设置request编码,结果还是问题依旧.(这个方法在事后想了下,发现其实这里做的和编码过滤器做的是一样的,多此一举了)

4. 然后抱着尝试的心态在某个form页面的method改为"get" , 提交后竟然没乱码了..这时候傻眼了,这样得改好多jsp文件..而且get方式没怎么用过,以前的参数传递不知道会不会出问题.
虽然看似问题好像解决了,但是糊里糊涂的,心里总是不踏实,而且如果真得靠这个方法解决的话..也很不甘心.

5. 最后在无意中看了下 web.xml 文件 , 这时候发现问题了, 原来 cas的认证过滤器比字符过滤器先加载了:
<!--cas认证:-->
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--字符过滤器-->
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

根据servlet2.3规范filter执行是按照web.xml配置的filter-mapping先后顺序进行执行,所以上面的配置会导致url请求先进行CASFilter的过滤器处理,这时候没有做编码处理,已经是乱码,到下面的encodingFilter处理时已经时乱码,再做编码处理已经没有用处。

总结:
因为这项目开发进度紧,每次从cvs更新的更新量都挺大,具体更新了些什么内容也没空去看,都只知道加了cas认证,但没有仔细看更新了哪些文件,所以一直忽略了web.xml文件.
大家以后做项目的时候,如果要加cas认证或者是别的安全检验的时候,记得留意这个filter的加载顺序呀!


最后:
感谢周进大虾~~~~~~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值