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" 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")加上这个代码就好了

该项目基于注解

实现数据转码所遇到的问题,自定拦截器配置在默认的拦截器后面,导致数据装配完成后才做转码,并没有实现数据转码的效果。后面把自定义拦截器放在默认拦截器的前面,先转码再转配数据,实现转码成功。

猜你喜欢

转载自q364035622.iteye.com/blog/1601621