struts2实现自定义拦截器对数据进行转码
先上代码:
?????? 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" />
???<interceptor-stack name="illegal">
????<interceptor-ref name="illegalInterceptor" />
????<interceptor-ref name="defaultStack" />
???</interceptor-stack>
??</interceptors>
??<default-interceptor-ref name="illegal" />
?</package>
?
?
拦截类代码
@ParentPackage("conver")加上这个代码就好了
?
该项目基于注解
?
?
实现数据转码所遇到的问题,自定拦截器配置在默认的拦截器后面,导致数据装配完成后才做转码,并没有实现数据转码的效果。后面把自定义拦截器放在默认拦截器的前面,先转码再转配数据,实现转码成功。
?