##Servlet中有获取Request参数的方法,而Nutz中也有重写类似的方法,我们只要知道它如何得到RequestMap就可以处理请求中的参数,进而对它进行处理。


  • 在Nutz项目中的MainModule中配置你写的类(如AnyMobileActionFilter.class);
  • 把需要过滤的字符写在配置文件中(如:SCFilter.properties).
  • 编写AnyMobileActionFilter 它是记住要实现ActionFilter,这个是Nutz中的对请求统一处理的过滤器;

一、MainModule中配置过滤器:

@Filters({@By(type=AnyMobileActionFilter.class)})
public class MainModule {

}

二、在配置文件中配置需要过滤的字符:

SCFilter.properties
#有多个参数请用"|"号隔开,可以有多个KEY=Value
#Key的名字随意取
NAME=滚犊子
HELLO=go and fuck youself|fuck
SPEAK=不要说脏话

三、编写AnyMobileActionFilter:

package com.carforu.web.filter;

import java.text.Normalizer;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.nutz.ioc.Ioc;
import org.nutz.ioc.impl.PropertiesProxy;
import org.nutz.mvc.ActionContext;
import org.nutz.mvc.ActionFilter;
import org.nutz.mvc.Mvcs;
import org.nutz.mvc.View;
import org.nutz.mvc.view.ForwardView;

public class AnyMobileActionFilter implements ActionFilter {

    /**
     * 遍历当前参数
     *
     * @param Map
     *            <String, String[]> 获取的内容
     * @return bool boolean
     */
    public boolean SCFCheck(Map<String, String[]> originalQueryString) {
        boolean bool = true;
        if (originalQueryString != null) {
            for (String key : (Set<String>) originalQueryString.keySet()) {
                if (bool != false) {
                    String[] rawVals = originalQueryString.get(key);
                    for (int i = 0; i < rawVals.length; i++) {
                        bool = stripXSS(rawVals[i]);
                        if(bool == false) break;
                    }
                    bool = stripXSS(key);
                    if(bool == false) break;
                } else {
                    break;
                }
            }
        }
        return bool;
    }

    /**
     * 判断是否匹配
     *
     * @param value
     *            当前要匹配内容
     * @return bool boolean
     */
    private boolean stripXSS(String value) {

        String cleanValue = null;
        Boolean bool = true;
        Ioc ioc = Mvcs.getIoc();
        PropertiesProxy scfilter = ioc.get(PropertiesProxy.class, "scfilter");

        if (value != null) {
            cleanValue = Normalizer.normalize(value, Normalizer.Form.NFD);

            List<String> fkeys = scfilter.getKeys();

            for (String fk : fkeys) {
                if (bool != false) {
                    String scfvalue = scfilter.get(fk);
                    String[] propertiesList = scfvalue.split("\\|");
                    for (int i = 0; i < propertiesList.length; i++) {
                        /*Pattern scfpattern = Pattern.compile(propertiesList[i],
                                Pattern.CASE_INSENSITIVE);
                        Matcher m = scfpattern.matcher(cleanValue);*/
                        int index = cleanValue.indexOf(propertiesList[i]);
                        if (index != -1) {
                            bool = false;
                            break;
                        }else{
                            bool = true;
                        }
                    }
                }else{
                    break;
                }

            }
        }
        return bool;
    }

    @Override
    public View match(ActionContext ac) {
        Map<String, String[]> originalQueryString = ac.getRequest()
                .getParameterMap();
        boolean bool = this.SCFCheck(originalQueryString);
        if (bool) {
            return null;
        } else {
            return new ForwardView("/unsafeCode.html");
        }
    }
}

这样你就可以随意配置要过滤的字符啦。

Nutz中过滤特殊字符的更多相关文章

  1. 过滤网址和输入框中的特殊字符,防止sql注入

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  2. MVC 记录操作日志与过滤特殊字符

    最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...

  3. JSON中的特殊字符

    使用JSON从后台向前台传输数据的时候,当数据本身含有一些特殊字符,会导致JSON数据的解析出错.这个时候,就需要将JSON中的特殊字符过滤掉. 用下面的方法对即将向前台输出的json字符串进行处理, ...

  4. php CI框架中URL特殊字符处理与SQL注入隐患

    php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...

  5. JSON数据的处理中的特殊字符

    JSON现在是很常见的处理数据的方式了.但由于自己使用的是反射获取数据,必须自己处理特殊字符,但总是发现有一些看不见的字符在前台 var obj = jQuery.parseJSON(msg);会转换 ...

  6. 解决pdf打印预览中遇到特殊字符,导出失败问题

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 由于近日由于pdf中存在特殊字符导致导出失败,主要原因是"&"字符与freema ...

  7. java过滤特殊字符的正则表达式

    // 过滤特殊字符 public staticString StringFilter(String str) throws PatternSyntaxException { // 只允许字母和数字 / ...

  8. Java过滤特殊字符

    Java正则表达式过滤 1.Java过滤特殊字符的正则表达式----转载 java过滤特殊字符的正则表达式[转载] 2010-08-05 11:06 Java过滤特殊字符的正则表达式   关键字: j ...

  9. KETTLE使用javascript步骤过滤特殊字符

    KETTLE使用javascript步骤过滤特殊字符 使用kettle在抽取大量excel数据时.总是遇到excel中有一些特殊字符,导致ExecuteSQL script步骤运行失败,本文记录一些方 ...

随机推荐

  1. SQL点滴14—编辑数据

    原文:SQL点滴14-编辑数据 数据库中的数据编辑是我们遇到的最频繁的工作,这一个随笔中我来总结一下最常用的数据编辑. select into 经常遇到一种情况是,我们希望创建一个新表,表中的数据来源 ...

  2. CSS学习笔记:文本换行显示(word-wrap)

    在CSS3中新定义了文本换行属性,word-wrap: nomal属性值表示控制连续文本换行. break-word属性值表示内容将在边界内换行.如果需要,词内换行(word-break)也会发生. ...

  3. [翻译]在Django项目中添加谷歌统计(Google Analytics)

    原文:<Google Analytics tracking code into Django projects, the easy way> 对我来说,制作一个可扩展的Django应用随时 ...

  4. leetcode[96] Binary Tree Inorder Traversal

    给定树根root.实现中序遍历,也就是左根右. 用递归的话,很简单,左边的返回值加上root的再加上右边的就行. 我自己写的有点挫: /** * Definition for binary tree ...

  5. 网页头一定要加的代码段(加注版)一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10

      网页头部常见的一段代码 <!--[if lt IE 7 ]><html class="ie6"><![endif]--> <!--[i ...

  6. jquery dialog的关闭事件不触发,触发不了

    在网上大部分是: close:function(event,ui){}; 但不管用,不过onClose:function(){};挺好使的,终于找到了

  7. FileOutputStream字节输出流和FileInputStream输入流(切记:out是输出到本地中,in是输入到程序中)这里介绍大文件和小文件的读取方式

    //FileOutputStream public class FileOutputStreamDemo { /**字节流:适用于任何文件,以字节为单位,进行读写操作  *字节流操作步骤:  *1.创 ...

  8. lex与yacc快速入门

    lex与yacc快速入门 [原创] 声明:原创文章,转载注明出处http://www.cnblogs.com/lucasysfeng/ 联系作者:lucasysfeng@gmail.com 第一节.l ...

  9. Tomcat7 Cluster 集群

    Tomcat7 自带的集群功能是通过session复制完成的,现有两个复制方式: DeltaManager: 将session复制到所有tomcat节点中,不管是否有相应的应用(it will rep ...

  10. 10.26最后的模拟DAY2 数字对[暴力]

    数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= ...