当前位置: 首页 > news >正文

java struct2拦截器_Java struts2 拦截器 interceptors

拦截器类如下所示:

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import org.apache.struts2.ServletActionContext;

import com.edp.org.user.vo.User;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**

* 特殊字符拦截器

*

* @author zhangda

*

*/

public class SpecialCharInterceptor extends AbstractInterceptor {

Logger logger = Logger.getLogger(this.getClass());

/**

* 拦截方法

*

*/

public String intercept(ActionInvocation invocation) throws Exception {

// 取得ActionContext实例

ActionContext ctx = invocation.getInvocationContext();

//先验证是否传入非法字符,以防sql注入 --张达 20151216

String msg = validateDataBaseSpecialChar(ctx);

if(!msg.equals("")){

logger.error("参数传入非法字符!");

HttpServletResponse response = ServletActionContext.getResponse();

response.setHeader("Content-type", "text/html;charset=UTF-8");

response.setCharacterEncoding("utf-8");

PrintWriter out = response.getWriter();

out.print("{\"success\": false, \"errMsg\": \"参数传入非法字符\"}");

out.flush();

out.close();

return ActionSupport.ERROR;

}else{

return invocation.invoke();

}

}

/***

* 过滤sql注入的特殊字符 zd

* @param ac

* @return

*/

public String validateDataBaseSpecialChar(ActionContext ac) {

Map inputMap = ac.getParameters();

//查询字典请求需要传入特殊字符

if(ac.getContext().getName().equals("getDictionaryByTypeIds")){

return "";

}else{

Iterator> it = inputMap.entrySet().iterator();

while (it.hasNext()) {

Map.Entry entry = it.next();

Object value = entry.getValue();

if (value instanceof String[]) {

String[] valueArray = (String[])value;

String valueStr = "";

if(valueArray != null && valueArray.length != 0){

for(int i=0; i

valueStr += valueArray[0] + ",";

}

}

return checkInject(valueStr);

}

}

}

return "";

}

//防sql注入的字符串数组

private static final String[] INJ_STR = {

"exec ", "select ", "insert ", "update " , "delete", "count ", "master ", "drop ",

"truncate ", "declare ", " or ", " and ", "--", "'", "\"", "\'", "\\\"", "(", ")", ";", "--", "+"

};

private static String checkInject(String str) {

for (int i=0; i

if (str.toLowerCase().indexOf(INJ_STR[i]) > -1) {

return "error";

}

}

return "";

}

}

struts配置文件如下:

相关文章:

  • JAVA安卓4.4.4_Android源码4.4.4_r1下载和编译
  • java 设置listview单元格颜色_动态改变Listview的item背景颜色和item中字体的颜色
  • 最长递增子序列 java_动态规划深入6 最长递增子序列
  • yml mysql参数_yml配置--给参数设置默认值
  • ant java eclipse_(转)Eclipse中使用Ant
  • java json merge_JavaScript 如何合并两个Json对象
  • java setselectionend_Java Gallery.setSelection方法代码示例
  • stringbuffer java API_StringBuffer类
  • jasperreport java数据_ireport5.6.0+jasperreports 使用java对象做为数据源导出excel或者Pdf...
  • 与时间相关的java源码_JAVA的Date类与Calendar类
  • Java修改文件扩展属性_扩展PropertyPlaceholderConfigurer对prop文件中的属性加密(修正1)...
  • java定义显性构造函数_Java基础之三、类的特性和接口
  • mysql用其他表更新_mysql用一个表更新另一个表
  • java maven 打包jar_maven 打包可执行 jar包 java application 方法
  • java专业考独立本科_复旦大学-计算机网络(独立本科B080709)(停考过渡)
  • 2019年如何成为全栈工程师?
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Angular 响应式表单之下拉框
  • Bytom交易说明(账户管理模式)
  • C# 免费离线人脸识别 2.0 Demo
  • create-react-app项目添加less配置
  • JavaScript设计模式系列一:工厂模式
  • Just for fun——迅速写完快速排序
  • Linux CTF 逆向入门
  • Map集合、散列表、红黑树介绍
  • Quartz初级教程
  • RxJS: 简单入门
  • socket.io+express实现聊天室的思考(三)
  • Vue 重置组件到初始状态
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 力扣(LeetCode)21
  • 你不可错过的前端面试题(一)
  • 使用parted解决大于2T的磁盘分区
  • 我的面试准备过程--容器(更新中)
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 再次简单明了总结flex布局,一看就懂...
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (42)STM32——LCD显示屏实验笔记
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)Linq学习笔记
  • ***检测工具之RKHunter AIDE
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 使用配置文件
  • .NET/C# 使窗口永不获得焦点
  • .netcore如何运行环境安装到Linux服务器
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!