java输入内容过滤Emoji表情
1、web.xml添加过滤器配置。
<!-- 配置过滤器 -->
<filter>
<filter-name>ParseEmojiFilter</filter-name>
<!-- 过滤的地址 -->
<filter-class>com.szreachflow.framework.web.filter.ParseEmojiFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ParseEmojiFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、过滤器实现
package com.szreachflow.framework.web.filter;
import com.vdurmont.emoji.EmojiParser;
import org.apache.log4j.Logger;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
public class ParseEmojiFilter implements Filter {
private static final Logger log = Logger.getLogger(ParseEmojiFilter.class);
private static List<String> noParseParam = Arrays.asList("coId","openId","processId","orgId","orgName","userId"
,"userName","userLogin","applyDate","flowId","taskId","fileUrl","fileName","subjectCode","subjectName");
/**
* 需要过滤的地址,提交申请的都进行过滤
*/
private static List<String> urlList = Arrays.asList("/applySave");
/**
* 是否不需要过滤
*
* @param requestUrl
* 请求的url
* @return
*/
public boolean isPast(String requestUrl) {
for (String url : urlList) {
if (requestUrl.equals(url) || requestUrl.endsWith(url)) {
return true;
}
}
return false;
}
@Override
public void destroy() {
}
@SuppressWarnings("unchecked")
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String url = ((HttpServletRequest) request).getRequestURI().substring(((HttpServletRequest)request).getContextPath().length());
//通过地址对特定的请求进行处理,如果不需要可以不用,如果不用,就会对使用的请求进行过滤
if (isPast(url)) {
log.info("=======过滤器ParseEmojiFilter执行开始【url="+url+"】");
MyHttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper(
(HttpServletRequest) request);
// 1.获取需要处理的参数并进行去表情处理
String paramName;
Enumeration<String> parameterNames = requestWrapper.getParameterNames();
while (parameterNames.hasMoreElements()) {
paramName = parameterNames.nextElement();
if (!noParseParam.contains(paramName)) {
requestWrapper.setParameter(paramName, EmojiParser.removeAllEmojis(requestWrapper.getParameter(paramName)));
}
}
// 2.放行,把我们的requestWrapper1放到方法当中
chain.doFilter(requestWrapper, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
3、参数获取
package com.szreachflow.framework.web.filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
// 用于存储请求参数
private Map<String , String[]> params = new HashMap<String, String[]>();
// 构造方法
public MyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
// 把请求参数添加到我们自己的map当中
this.params.putAll(request.getParameterMap());
}
/**
* 添加参数到map中
* @param extraParams
*/
public void setParameterMap(Map<String, Object> extraParams) {
for (Map.Entry<String, Object> entry : extraParams.entrySet()) {
setParameter(entry.getKey(), entry.getValue());
}
}
/**
* 添加参数到map中
* @param name
* @param value
*/
public void setParameter(String name, Object value) {
if (value != null) {
System.out.println(value);
if (value instanceof String[]) {
params.put(name, (String[]) value);
} else if (value instanceof String) {
params.put(name, new String[]{(String) value});
} else {
params.put(name, new String[]{String.valueOf(value)});
}
}
}
/**
* 重写getParameter,代表参数从当前类中的map获取
* @param name
* @return
*/
@Override
public String getParameter(String name) {
String[]values = params.get(name);
if(values == null || values.length == 0) {
return null;
}
return values[0];
}
/**
* 重写getParameterValues方法,从当前类的 map中取值
* @param name
* @return
*/
@Override
public String[] getParameterValues(String name) {
return params.get(name);
}
}
正文到此结束