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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洲上牧童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值