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步骤运行失败,本文记录一些方 ...
随机推荐
- Bundle压缩JS和CSS
ASP.NET MVC之Bundle压缩JS和CSS 介绍Bundle之前先引用<淘宝技术这十年>中一段话,对Web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的CSS.J ...
- Knockout应用开发指南
Knockout应用开发指南 第一章:入门 2011-11-21 14:20 by 汤姆大叔, 20799 阅读, 17 评论, 收藏, 编辑 1 Knockout简介 (Introductio ...
- css Cursor:url()自定义鼠标指针样式为图片
css自定义鼠标指针样式为图片Cursor:url()的使用,今天在项目中,要用到自定义鼠标样式,格式: css:{cursor:url('绝对路径的图片(格式:cur,ico)'),-moz-zoo ...
- SpringMVC 国际化
SpringMVC学习系列(8) 之 国际化 在系列(7)中我们讲了数据的格式化显示,Spring在做格式化展示的时候已经做了国际化处理,那么如何将我们网站的其它内容(如菜单.标题等)做国际化处理呢? ...
- C++ builder 中AnsiString的字符串转换方法大全
C++ builder 中AnsiString的字符串转换方法大全 //Ansistring 转 charvoid __fastcall TForm1::Button1Click(TObject *S ...
- 【值得收藏】绘图工具Origin的学习资料汇编【可免费下载】
Origin使用教程 Origin为OriginLab公司出品的较流行的专业函数绘图软件,是公认的简单易学.操作灵活.功能强大的软件,既可以满足一般用户的制图需要,也可以满足高级用户数据分析.函数拟合 ...
- EasyUI搭建前端框架
EasyUI搭建前端框架 前言: 最近在忙公司的项目,也没太多时间来更新博客,谢谢大家的关注. 好啦,有了前面的系统整体简介和用户登录界面,我们开始使用EasyUI搭建前端页面框架! EasyUI官方 ...
- jsonp跨域+ashx
jsonp跨域+ashx(示例) 前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件 ...
- Love myself...
Sometimes we feel as if our lives rely on that one person. We think 'If I do this, he/she will like ...
- Linux普通文件和设备的异同点
众所周知,Linux下一切皆文件,文件包含数据,具有属性,通过目录中的名字被标识,可以从一个文件读取数据,写入另一个文件,而Linux把这写应用于设备. 请看如下普通文件和设备的对比: