##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");
        }
    }
}

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

最新文章

  1. wex5 实战 登陆帐号更换与用户id一致性
  2. tp框架总体学习总结(一)
  3. tomcat架构之-----基本概念
  4. JavaScript Patterns 5.3 Private Properties and Methods
  5. gradle手工搭建java项目搭建
  6. [JS2] JS是弱类型
  7. 2014 Super Training #4 D Paint the Grid Again --模拟
  8. 测试 IE 浏览器兼容性 VirtualBox + modern.ie
  9. [转]mysql导入导出数据中文乱码解决方法小结
  10. logstash 防止实际处理时间跟事件产生时间略有偏差
  11. 基本文件的I/O
  12. boost 轻量级信号量
  13. android jni ndk 视频分享
  14. 欧几里得算法求最大公约数(gcd)
  15. java枚举使用 总结
  16. Android Glide 加载图片
  17. 南大算法设计与分析课程OJ答案代码(2)最大子序列和问题、所有的逆序对
  18. tomcat配置通过域名直接访问项目首页步骤
  19. 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进
  20. c++的类型转换(转)

热门文章

  1. Eclipse 使用技巧合辑
  2. 《Visual Studio Magazine》2013年读者选择奖—界面框架类
  3. Spring.NET学习
  4. angularjs执行流程
  5. WCF入门教程(图文)VS2012
  6. windows 8以上找回开始菜单
  7. jQuery的奥秘
  8. 欧几里德算法及其扩展(推导&amp;&amp;模板)
  9. BDD
  10. [转]Jailbreak Detection Methods