先上代码:
package cn.thszirs.common.util;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springside.modules.web.struts2.Struts2Utils;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 对数据进行安全管理
*
* @author 张祺麟
*
*/
public class IllegalInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = Struts2Utils.getRequest();
String param = "";
String paramValue = "";
java.util.Enumeration params = request.getParameterNames();
// 循环读取参数
while (params.hasMoreElements()) {
param = (String) params.nextElement(); // 获取请求中的参数
String[] values = request.getParameterValues(param);// 获得每个参数对应的值
for (int i = 0; i < values.length; i++) {
paramValue = values[i];
// 转换目标字符变成对象字符,可以多个。后期扩展特殊字符库用于管理
paramValue = new String(paramValue.getBytes("iso-8859-1"),
("UTF-8"));
// 这里还可以增加,如领导人 自动转义成****,可以从数据库中读取非法关键字。
values[i] = paramValue;
}
// 把转义后的参数重新放回request中
request.setAttribute(param, paramValue);
}
return invocation.invoke();
}
}
struts.xml
<!-- 实现数据转码 -->
<package name="conver" extends="struts-default">
<interceptors>
<interceptor name="illegalInterceptor" class="cn.thszirs.common.util.IllegalInterceptor" />
<interceptor-stack name="illegal">
<interceptor-ref name="illegalInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="illegal" />
</package>
拦截类代码
@ParentPackage("conver")加上这个代码就好了
该项目基于注解
实现数据转码所遇到的问题,自定拦截器配置在默认的拦截器后面,导致数据装配完成后才做转码,并没有实现数据转码的效果。后面把自定义拦截器放在默认拦截器的前面,先转码再转配数据,实现转码成功。