您的位置:首页 > 运维架构 > 网站架构

关于直播网站的搭建--第二步:关于非法请求的拦截

2017-10-09 16:10 405 查看
尝试过netty搭建一个聊天室,但是后面综合了一下,还是使用websocket来搭建聊天室,websocket的优势,没有过多了解,但是个人在使用过程中,感觉websocket对于客户端和服务端的通信有着十分良好的支持。本来打算写写过程的,但是想起了自己已经做了笔记了,就不多做赘述了。

这里想写写接收前端请求的时候,对于非法请求参数的拦截。

首先,我的工程项目是以ssm框架为主,前端ajax异步向后台发送请求的时候,在工程的web.xml加入拦截器,拦截所有向后台请求的地址
<filter>
<filter-name>IllegalCharacterFilter</filter-name>
<filter-class>com.zzx.sys.control.filter.IllegalCharacterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>IllegalCharacterFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>


我的请求都是以do结尾。。。

然后url请求就会转发到我们的过滤器中了
/**
* 非法字符判断过滤器
* @author zzxin9
*
*/
public class IllegalCharacterFilter implements Filter {

private static String IllegalChars = "";
@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
//获得所有请求参数名
Enumeration params = req.getParameterNames();
String sql = "";
while (params.hasMoreElements()) {
//得到参数名
String name = params.nextElement().toString();
if(isNumber(n
4000
ame)){
continue;
}
//得到参数对应值
String[] value = req.getParameterValues(name);
for (int i = 0; i < value.length; i++) {
sql = sql + value[i];
}
}
if (sqlValidate(sql)) {
Result result = new Result();
result.setCode(1);
result.setMessage("请求参数中含有非法字符");
JsonUtil.outputJson(res, result);
} else {
chain.doFilter(request,response);
}

}

public boolean isNumber(String name){
char[] charArray = name.toCharArray();
for(int i=0;i<charArray.length;i++){
if(!Character.isDigit(charArray[i])){
return false;
}
}
return true;
}

@Override
public void init(FilterConfig config) throws ServletException {
IllegalChars = PropsUtil.getProperty("IllegalChars");
}

//效验
protected static boolean sqlValidate(String str) {
str = str.toLowerCase();//统一转为小写
if(IllegalChars!=null&&!"".equals(IllegalChars)){
String[] badStrs = IllegalChars.split("\\|");
for (int i = 0; i < badStrs.length; i++) {
if (str.indexOf(badStrs[i]) >= 0) {
return true;
}
}
}
return false;
}

}


return true就继续转发请求,不然就拦截了下来了,这样一来,可以有效的防止sql注入之类的问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐