JAVA 特殊字符过滤器

public class SpecialCharacterFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@SuppressWarnings({ "unchecked", "null" })
	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)arg0;
		Map map = request.getParameterMap(); //获取request里面所有请求参数。已Key-value形式返回
		if(map!=null||map.size()<1){   //有参数时才处理
			Set set = map.entrySet();
			Iterator ite = set.iterator(); //返回迭代器
			while(ite.hasNext()){   //迭代替换参数中的特殊字符
				Map.Entry entry = (Entry) ite.next();
				if(entry.getValue() instanceof String[]){
					   String[] values = (String[]) entry.getValue();  
			      for(int i = 0 ; i < values.length ; i++){  
			       values[i] = StringFilter(values[i]);  
			      }
			      entry.setValue(values);  //存进参数集合中
				}
			}
	
		}
		
		arg2.doFilter(arg0, arg1);	  //放行
		}


	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}
   
	
  public  String StringFilter(String   str){     
  String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?\"\"]";  
  Pattern   p   =   Pattern.compile(regEx);     
  Matcher   m   =   p.matcher(str);     
  return   m.replaceAll("").trim();     
  }  
}

Java中,处理HTTP请求参数时,可能会遇到恶意用户提交的一些特殊字符,如SQL注入攻击。为了防止这些问题,开发者通常会使用参数过滤器对输入进行验证和清理。其中一个常见的过滤器是`org.springframework.web.bind.WebDataBinder`提供的功能,特别是通过`Validator`接口。 例如,你可以创建一个自定义的`FilteredParameter`注解,然后使用Spring MVC的`@InitBinder`注解配合同名的`FilteredBinder`方法: ```java import javax.validation.constraints.Pattern; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import java.util.Set; @Component public class FilteredBinder { @InitBinder("filteredParam") public void initBinder(WebDataBinder binder, WebRequest request) { binder.addValidators(new MyCustomValidator()); } private static class MyCustomValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return String.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { if (target instanceof String) { String paramValue = (String) target; // 使用正则表达式或其他安全策略过滤特殊字符 if (!Pattern.matches("[a-zA-Z0-9\\s]", paramValue)) { errors.rejectValue("filteredParam", "invalid.special.characters"); } } } } } ``` 在这个例子中,`filteredParam`是你想要过滤的参数名称,如果它包含除了字母、数字和空格之外的特殊字符,就会触发错误提示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值