Nutz中过滤特殊字符
##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中过滤特殊字符的更多相关文章
- 过滤网址和输入框中的特殊字符,防止sql注入
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- MVC 记录操作日志与过滤特殊字符
最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...
- JSON中的特殊字符
使用JSON从后台向前台传输数据的时候,当数据本身含有一些特殊字符,会导致JSON数据的解析出错.这个时候,就需要将JSON中的特殊字符过滤掉. 用下面的方法对即将向前台输出的json字符串进行处理, ...
- php CI框架中URL特殊字符处理与SQL注入隐患
php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...
- JSON数据的处理中的特殊字符
JSON现在是很常见的处理数据的方式了.但由于自己使用的是反射获取数据,必须自己处理特殊字符,但总是发现有一些看不见的字符在前台 var obj = jQuery.parseJSON(msg);会转换 ...
- 解决pdf打印预览中遇到特殊字符,导出失败问题
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 由于近日由于pdf中存在特殊字符导致导出失败,主要原因是"&"字符与freema ...
- java过滤特殊字符的正则表达式
// 过滤特殊字符 public staticString StringFilter(String str) throws PatternSyntaxException { // 只允许字母和数字 / ...
- Java过滤特殊字符
Java正则表达式过滤 1.Java过滤特殊字符的正则表达式----转载 java过滤特殊字符的正则表达式[转载] 2010-08-05 11:06 Java过滤特殊字符的正则表达式 关键字: j ...
- KETTLE使用javascript步骤过滤特殊字符
KETTLE使用javascript步骤过滤特殊字符 使用kettle在抽取大量excel数据时.总是遇到excel中有一些特殊字符,导致ExecuteSQL script步骤运行失败,本文记录一些方 ...
随机推荐
- PHP 17: MySQL的简单介绍
原文:PHP 17: MySQL的简单介绍 这一章将简单介绍MySQL的基本知识. 本文来自http://lib.hackbase.com/html/8/35125.htm. MySQL是最受欢迎的开 ...
- C++中的左值和右值
左值和右值的定义 在C++中,能够放到赋值操作符=左边的是左值,能够放到赋值操作符右边的是右值.有些变量既能够当左值又能够当右值.进一步来讲,左值为Lvalue,事实上L代表Location,表示在内 ...
- INSTEAD OF触发器
Oracle触发器5(INSTEAD OF触发器) 前提:对于简单的视图,可以直接进行DML操作,但是对于复杂视图,不允许直接执行DML操作,当视图符合以下任何一种情况都不可以: 具有集合操作符(UN ...
- Oracle索引——位图索引
1.语法create bitmap index index_name on 表名(字段);2.举个例子你就能明白了:如有表 test(id,name,address)数据(1,张三,大连)(2,李四, ...
- Orchard Logging
Orchard 刨析:Logging 最近事情比较多,有预研的,有目前正在研发的,都是很需要时间的工作,所以导致这周只写了两篇Orchard系列的文章,这边不能保证后期会很频繁的更新该系列,但我会写完 ...
- Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等
count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age ...
- 2014.3.6-C语言学习小结
链表基础: 知识点: 1.链表基础 2.节点的创建和添加 llist_append_node 3.链表的遍历 llist_print_each 4.链表的查找与修改 5.链表的插入与删除 6.链表的销 ...
- Js 数组(一):基础应用
(一) Js 数据类型 分为基本数据类型以及引用类型 基本数据类型有 null,undefined,Boolen,Number,String,还有一种复杂数据类型 Object. var var1 = ...
- 【ios开发】Block编程
1 什么是block iOS SDK 4.0开始,Apple引入了block这一特性.字面上说,block就是一个代码块,但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传 ...
- 在 go/golang语言中使用 google Protocol Buffer
怎么在go语言中实用google protocol Buffer呢? 现在的潮流趋势就是一键搞定,跟ubuntu安装软件一样 go get code.google.com/p/goprotobuf/{ ...