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步骤运行失败,本文记录一些方 ...
随机推荐
- 数以百万计美元的融资YO是什么东东?
给自己做个广告哈,新栏目"面试"已经推出,回复"面试"就可以获取. 这两天最火的应用是什么.非yo莫属,堪称史上最简单的社交应用,仅仅能向好友发送一个yo. 出 ...
- Linux下的C程序如何调用系统命令,并获取系统的输出信息到C程序中
直接贴代码: #include <stdio.h> #include <string.h> #include <errno.h> int main(int argc ...
- Linux下防火墙设置
Linux下开启/关闭防火墙命令 1) 永久性生效,重启后不会复原 开启:chkconfigiptables on 关闭:chkconfigiptables off 2) 即时生效,重启后复原 开启 ...
- 淘宝code
淘宝code 相信大家都听说过GitHub,也有很多人在用,但是GitHub毕竟在国外,速度不是很给力,而且安装过程也是很漫长.今天来给大家介绍一个国内的免费的开源项目平台,当然也是一个SVN版本控制 ...
- extern用法汇总
extern 在源文件A里定义的函数,在其他源文件中是看不见的(即不能訪问).为了在源文件B里能调用这个函数,应该在B的头部加上一个外部声明: extern 函数原型: 这样,在源文件B里也能够调 ...
- solr的配置文件及其含义
solr与.net系列课程(二)solr的配置文件及其含义 solr与.net系列课程(二)solr的配置文件及其含义 本节内容还是不会涉及到.net与数据库的内容,但是不要着急,这都是学时s ...
- nagios 安装和配置(含有nrpe结束)所有 (两)
二.ndoutils 安装: 1.mysql安装(若未安装) #apt-get install mysql-servermysql-client 2.DBI安装(若未安装) #cd /usr/loca ...
- Codeforces 10D LCIS 找出最长公共子和产量增加这个序列 dp
主题链接:点击打开链接 意甲冠军: 特定n长序列 给定k长序列 求LCIS并输出这个子序列 如有多解输出随意解.. = - = 敲的时候听着小曲儿pre的含义还没有想清楚,万万没想到就过了... #i ...
- 领域模型(Domain Model)
领域模型(Domain Model) 一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去 ...
- JavaScript等比例缩放图片
js等比例缩放图片,这个功能非常实用,当网页加载一个尺寸比较大的图片时,往往会把一个网页撑的变形,页面变得很难看,于是我们就想到了用JS去控制超出一定范围的图片,以稳定页面布局,本代码段就是完成了此功 ...