您的位置:首页 > 编程语言 > Java开发

Struts2拦截器的使用2

2012-10-19 11:40 302 查看
在学习了《Struts2拦截器的使用1》教程之后,根据项目需要,做了一个拦截器,目的是将前端传入的参数中的非法字符做转化,以防止JS注入。另外:拦截器的配置就不说明了,不懂请参考《Struts2拦截器的使用1》,拦截器代码如下:

package com.***.interceptors;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

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 com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import com.opensymphony.xwork2.util.ValueStack;

import com.***.utils.StringUtil;

public class IllegalCharacterInterceptor extends AbstractInterceptor

{

@Override

public String intercept(ActionInvocation invocation) throws Exception

{

ActionContext ac = invocation.getInvocationContext();

ValueStack stack = ac.getValueStack();

Map valueTreeMap=invocation.getInvocationContext().getParameters();

//下面开始遍历组装

Iterator iterator = valueTreeMap.entrySet().iterator();

while (iterator.hasNext()) {

Entry entry = (Entry) iterator.next();

String key = (String) entry.getKey();

String[] oldValues =null;

if (entry.getValue() instanceof String)

{

oldValues=new String[]{entry.getValue().toString()};

}else

{

oldValues=(String[]) entry.getValue();

}

String newValueStr = null;//新值

if (oldValues.length > 1) {

newValueStr = "{";

for (int i = 0; i < oldValues.length; i++) {

newValueStr += StringUtil.filtrateString(oldValues[i].toString());//字符转义处理

if (i != oldValues.length - 1) {

newValueStr += ",";

}

}

newValueStr += "}";

} else if (oldValues.length == 1) {

newValueStr = StringUtil.filtrateString(oldValues[0].toString());//字符转义处理

} else {

newValueStr = "null";

}

stack.setValue(key, newValueStr);

}

String result=null;

try {

result = invocation.invoke();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result;

}

}

非法字符处理工具类:

package com.***.utils;

/**

* 过滤字符串特殊字符

*

*/

public class StringUtil {

/**

* 过滤特殊字符

* @param content 要过滤的内容

* @return

*/

public static String filtrateString(String content) {

if (content == null || "".equals(content.trim())) {

return content;

}

//content = content.replaceAll("&", "&");

content = content.replaceAll("<", "<");

content = content.replaceAll(">", ">");

content = content.replaceAll("\t", " ");

content = content.replaceAll("\r\n", "\n");

content = content.replaceAll("\n", "<br/>");

content = content.replaceAll("'", "'");

content = content.replaceAll("\\\\", "\");

content = content.replaceAll("\"", """);

return content;

}

/**

* 特殊字符转文本

* @param content 要转换的内容

* @return

*/

public static String reverseString(String content) {

if (content == null || "".equals(content.trim())) {

return content;

}

//content = content.replaceAll("&", "&");

content = content.replaceAll("<", "<");

content = content.replaceAll(">", ">");

content = content.replaceAll(" ", "\t");

content = content.replaceAll("\n", "\r\n");

content = content.replaceAll("<br/>", "\n");

content = content.replaceAll("'", "'");

content = content.replaceAll("\", "\\\\");

content = content.replaceAll("<", "<");

content = content.replaceAll(">", ">");

content = content.replaceAll(""", "\"");

return content;

}

/**

* 判断字符串是否为数字

* @param str

* @return

*/

public static boolean isNumeric(String str) {

for (int i = 0; i<str.length();i++) {

if (!Character.isDigit(str.charAt(i))) {

return false;

}

}

return true;

}

/**

* 替换特殊字符串

* @Title: ResplaceString

* @param @param content

* @param @return

* @return String

* @throws

*/

public static String ResplaceString(String content) {

if (content == null || "".equals(content.trim())) {

return content;

}

content = content.replaceAll("<", "<");

content = content.replaceAll(">", ">");

// content = content.replaceAll("/", "/");

content = content.replaceAll("\"", """);

return content;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: