转载

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);
    }

}
正文到此结束