何必奢求太多丶 2016-05-06 04:06 采纳率: 0%
浏览 2240

过滤器过滤特殊字符无法获取到参数

代码如下:

 $.ajax({
                url: url,
                type: 'post',
                data: o,
                cache: false,
                success: function (text) {
                    console.dir(text);
                    CloseWindow("save");
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.responseText);
                    CloseWindow();
                }
            });

我使用ajax方式提交,post提交方式,手动封装data。
后端接收如下:

 @At("/updateProductCfg")
    public ExecuteState updateProductCfg(@Param("..") CmsLoanProduct param,HttpSession session) {
        System.out.print(Json.toJson(param));
        UserObject user=(UserObject)session.getAttribute("userObject");
        param.setUsrModify(user.getUserId());
        param.setOrgModify(user.getUserOrgName());
        param.setDatModify(new Timestamp(System.currentTimeMillis()));
        ExecuteState state = productCfgManagerBiz.updateProductCfg(param);
        return state;
    }

现在如果在param参数中有特殊字符,那么我将定义
web.xml,代码如下

  <filter>
        <filter-name>XssFilter</filter-name>
        <filter-class>com.ifs.frame.filter.XssFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>XssFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

拦截器代码

 public class XssFilter implements Filter {

    FilterConfig filterConfig = null;
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,
            ServletException {
            XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper(
            (HttpServletRequest) request);
            filterChain.doFilter(xssRequest, response);

    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    @Override
    public void destroy() {
        this.filterConfig=null;
    }

}

XssHttpServletRequestWrapper代码

 public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
    public XssHttpServletRequestWrapper(HttpServletRequest servletRequest) {
        super(servletRequest);
    }
    public String[] getParameterValues(String parameter) {
      String[] values = super.getParameterValues(parameter);
      if (values==null)  {
                  return null;
          }
      int count = values.length;
      String[] encodedValues = new String[count];
      for (int i = 0; i < count; i++) {
                 encodedValues[i] = cleanXSS(values[i]);
       }
      return encodedValues;
    }
    public String getParameter(String parameter) {
          String value = super.getParameter(parameter);
          if (value == null) {
                 return null;
                  }
          return cleanXSS(value);
    }
    public String getHeader(String name) {
        String value = super.getHeader(name);
        if (value == null)
            return null;
        return cleanXSS(value);
    }   
    private String cleanXSS(String value) {
        value = value.replaceAll("&", "&amp;");
        value = value.replaceAll("#", "&#35;");
        value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
        value = value.replaceAll("\"", "&#92;");
        value = value.replaceAll("'", "&#39;");
        return value;
    }

现在这些代码我确无法获取到data中的值,也无法转换,各位有什么好的解决方法吗?

以我现在所知道的是参数未封装到HttpServletRequest里面导致的。但我现在无法在来修改源码了,也只有通过写过滤器来想办法

  • 写回答

1条回答

  • devmiao 2016-05-06 22:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀