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步骤运行失败,本文记录一些方 ...
随机推荐
- 解决wps for linux 中文输入法光标不跟随的问题
需要安装qt4-qtconfig和ibus-qt4,安装ibus-qt4之后才能在qt4-qtconfig“界面”选项卡默认输入法选项中看到ibus,选定它,然后设置XIM输入风格为光标跟随风格,保存 ...
- weblogic生产、开发模式互转
生产模式与开发模式转换: 1.生产模式-->开发模式 将%DOMAIN_HOME%\config\config.xml文件中<production-mode-enabled> ...
- Rich IntelliSense for jQuery
A while back we updated VS2008 IntelliSense to not fail when referencing jQuery. However, getting I ...
- 将DataTable内容导出到Excel表格的两种方法
方法一:循环DataTable单元格内容拼接字符串,利用StreamWriter的Write方法将字符串写入Excel文件中 这种方法很实现很简单.拼接字符串时,每个单元格之间添加'\t'(表示一个占 ...
- Mysql高级之主从复制
原文:Mysql高级之主从复制 主从复制不就是多台服务器嘛!,一个改变另一个也改变啦,内容其实都一样! 原理: 对数据库进行操作会生成一个文件,binlog(二进制文件),从服务器配置relaylog ...
- ASP.NET MVC应用程序实现下载功能
ASP.NET MVC应用程序实现下载功能 上次Insus.NET有在MVC应用程序实现了上传文件的功能<MVC应用程序显示上传的图片> http://www.cnblogs.com/in ...
- 笔试总结篇(一) : 广州X公司笔试
一.单选题: Ps : 当时由于去广州路上颠簸很困,导致刚做几分钟题目就睡了一觉.起来发现20分钟过去了.擦擦! 1. 假设磁盘文件foobar.txt 由 6个ASCII 码字符“foobar” 组 ...
- C语言中指针变量如何向函数中传递
指针变量存储的是地址,所以在函数调用的时候我们能否将指针变量传递给函数?如果不知道结果,那我们可以直接问电脑,输入如下一段代码. void GetMemory(char *p) { p = (char ...
- java web项目基础
listener,filter,servlet的初始化顺序 web.xml中可以配置如下信息: context-param,listener,filter,servlet. 他们的加载顺序和在we ...
- Repeater 模板中查找子控件
前言:对于Repeater控件,相信从事NETWeb开发的同仁们再熟悉不过了.因其呈现方式和Literal一样,并不在前端生成任何表单标签元素,所以属于比较轻量级的控件.不过青睐于Repeater的主 ...