1、web.xml添加过滤器

<filter><filter-name>EmojiFilter</filter-name><filter-class>com.frame.web.filter.EmojiFilter</filter-class><async-supported>true</async-supported>
</filter>
<filter-mapping><filter-name>EmojiFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

2、EmojiUtils转换类

package com.frame.util;import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**** @Description:过滤emoji表情*/
public class EmojiUtils {public final static String unicodeReg = "[" + "\u4E00-\u9FBF" + // :CJK// 统一表意符号// (CJK// Unified// Ideographs)"\u4DC0-\u4DFF" + // :易经六十四卦符号 (Yijing Hexagrams Symbols)"\u0000-\u007F" + // :C0控制符及基本拉丁文 (C0 Control and Basic Latin)"\u0080-\u00FF" + // :C1控制符及拉丁:补充-1 (C1 Control and Latin 1// Supplement)"\u0100-\u017F" + // :拉丁文扩展-A (Latin Extended-A)"\u0180-\u024F" + // :拉丁文扩展-B (Latin Extended-B)"\u0250-\u02AF" + // :国际音标扩展 (IPA Extensions)"\u02B0-\u02FF" + // :空白修饰字母 (Spacing Modifiers)"\u0300-\u036F" + // :结合用读音符号 (Combining Diacritics Marks)"\u0370-\u03FF" + // :希腊文及科普特文 (Greek and Coptic)"\u0400-\u04FF" + // :西里尔字母 (Cyrillic)"\u0500-\u052F" + // :西里尔字母补充 (Cyrillic Supplement)"\u0530-\u058F" + // :亚美尼亚语 (Armenian)"\u0590-\u05FF" + // :希伯来文 (Hebrew)"\u0600-\u06FF" + // :阿拉伯文 (Arabic)"\u0700-\u074F" + // :叙利亚文 (Syriac)"\u0750-\u077F" + // :阿拉伯文补充 (Arabic Supplement)"\u0780-\u07BF" + // :马尔代夫语 (Thaana)// "\u07C0-\u077F"+//:西非书面语言 (N'Ko)"\u0800-\u085F" + // :阿维斯塔语及巴列维语 (Avestan and Pahlavi)"\u0860-\u087F" + // :Mandaic"\u0880-\u08AF" + // :撒马利亚语 (Samaritan)"\u0900-\u097F" + // :天城文书 (Devanagari)"\u0980-\u09FF" + // :孟加拉语 (Bengali)"\u0A00-\u0A7F" + // :锡克教文 (Gurmukhi)"\u0A80-\u0AFF" + // :古吉拉特文 (Gujarati)"\u0B00-\u0B7F" + // :奥里亚文 (Oriya)"\u0B80-\u0BFF" + // :泰米尔文 (Tamil)"\u0C00-\u0C7F" + // :泰卢固文 (Telugu)"\u0C80-\u0CFF" + // :卡纳达文 (Kannada)"\u0D00-\u0D7F" + // :德拉维族语 (Malayalam)"\u0D80-\u0DFF" + // :僧伽罗语 (Sinhala)"\u0E00-\u0E7F" + // :泰文 (Thai)"\u0E80-\u0EFF" + // :老挝文 (Lao)"\u0F00-\u0FFF" + // :藏文 (Tibetan)"\u1000-\u109F" + // :缅甸语 (Myanmar)"\u10A0-\u10FF" + // :格鲁吉亚语 (Georgian)"\u1100-\u11FF" + // :朝鲜文 (Hangul Jamo)"\u1200-\u137F" + // :埃塞俄比亚语 (Ethiopic)"\u1380-\u139F" + // :埃塞俄比亚语补充 (Ethiopic Supplement)"\u13A0-\u13FF" + // :切罗基语 (Cherokee)"\u1400-\u167F" + // :统一加拿大土著语音节 (Unified Canadian Aboriginal// Syllabics)"\u1680-\u169F" + // :欧甘字母 (Ogham)"\u16A0-\u16FF" + // :如尼文 (Runic)"\u1700-\u171F" + // :塔加拉语 (Tagalog)"\u1720-\u173F" + // :Hanunóo"\u1740-\u175F" + // :Buhid"\u1760-\u177F" + // :Tagbanwa"\u1780-\u17FF" + // :高棉语 (Khmer)"\u1800-\u18AF" + // :蒙古文 (Mongolian)"\u18B0-\u18FF" + // :Cham"\u1900-\u194F" + // :Limbu"\u1950-\u197F" + // :德宏泰语 (Tai Le)"\u1980-\u19DF" + // :新傣仂语 (New Tai Lue)"\u19E0-\u19FF" + // :高棉语记号 (Kmer Symbols)"\u1A00-\u1A1F" + // :Buginese"\u1A20-\u1A5F" + // :Batak"\u1A80-\u1AEF" + // :Lanna"\u1B00-\u1B7F" + // :巴厘语 (Balinese)"\u1B80-\u1BB0" + // :巽他语 (Sundanese)"\u1BC0-\u1BFF" + // :Pahawh Hmong"\u1C00-\u1C4F" + // :雷布查语(Lepcha)"\u1C50-\u1C7F" + // :Ol Chiki"\u1C80-\u1CDF" + // :曼尼普尔语 (Meithei/Manipuri)"\u1D00-\u1D7F" + // :语音学扩展 (Phone tic Extensions)"\u1D80-\u1DBF" + // :语音学扩展补充 (Phonetic Extensions Supplement)"\u1DC0-\u1DFF" + // 结合用读音符号补充 (Combining Diacritics Marks// Supplement)"\u1E00-\u1EFF" + // :拉丁文扩充附加 (Latin Extended Additional)"\u1F00-\u1FFF" + // :希腊语扩充 (Greek Extended)"\u2000-\u206F" + // :常用标点 (General Punctuation)"\u2070-\u209F" + // :上标及下标 (Superscripts and Subscripts)"\u20A0-\u20CF" + // :货币符号 (Currency Symbols)"\u20D0-\u20FF" + // :组合用记号 (Combining Diacritics Marks for Symbols)"\u2100-\u214F" + // :字母式符号 (Letterlike Symbols)"\u2150-\u218F" + // :数字形式 (Number Form)"\u2190-\u21FF" + // :箭头 (Arrows)"\u2200-\u22FF" + // :数学运算符 (Mathematical Operator)"\u2300-\u23FF" + // :杂项工业符号 (Miscellaneous Technical)"\u2400-\u243F" + // :控制图片 (Control Pictures)"\u2440-\u245F" + // :光学识别符 (Optical Character Recognition)"\u2460-\u24FF" + // :封闭式字母数字 (Enclosed Alphanumerics)"\u2500-\u257F" + // :制表符 (Box Drawing)"\u2580-\u259F" + // :方块元素 (Block Element)"\u25A0-\u25FF" + // :几何图形 (Geometric Shapes)"\u2600-\u26FF" + // :杂项符号 (Miscellaneous Symbols)"\u2700-\u27BF" + // :印刷符号 (Dingbats)"\u27C0-\u27EF" + // :杂项数学符号-A (Miscellaneous Mathematical// Symbols-A)"\u27F0-\u27FF" + // :追加箭头-A (Supplemental Arrows-A)"\u2800-\u28FF" + // :盲文点字模型 (Braille Patterns)"\u2900-\u297F" + // :追加箭头-B (Supplemental Arrows-B)"\u2980-\u29FF" + // :杂项数学符号-B (Miscellaneous Mathematical// Symbols-B)"\u2A00-\u2AFF" + // :追加数学运算符 (Supplemental Mathematical Operator)"\u2B00-\u2BFF" + // :杂项符号和箭头 (Miscellaneous Symbols and Arrows)"\u2C00-\u2C5F" + // :格拉哥里字母 (Glagolitic)"\u2C60-\u2C7F" + // :拉丁文扩展-C (Latin Extended-C)"\u2C80-\u2CFF" + // :古埃及语 (Coptic)"\u2D00-\u2D2F" + // :格鲁吉亚语补充 (Georgian Supplement)"\u2D30-\u2D7F" + // :提非纳文 (Tifinagh)"\u2D80-\u2DDF" + // :埃塞俄比亚语扩展 (Ethiopic Extended)"\u2E00-\u2E7F" + // :追加标点 (Supplemental Punctuation)"\u2E80-\u2EFF" + // :CJK 部首补充 (CJK Radicals Supplement)"\u2F00-\u2FDF" + // :康熙字典部首 (Kangxi Radicals)"\u2FF0-\u2FFF" + // :表意文字描述符 (Ideographic Description Characters)"\u3000-\u303F" + // :CJK 符号和标点 (CJK Symbols and Punctuation)"\u3040-\u309F" + // :日文平假名 (Hiragana)"\u30A0-\u30FF" + // :日文片假名 (Katakana)"\u3100-\u312F" + // :注音字母 (Bopomofo)"\u3130-\u318F" + // :朝鲜文兼容字母 (Hangul Compatibility Jamo)"\u3190-\u319F" + // :象形字注释标志 (Kanbun)"\u31A0-\u31BF" + // :注音字母扩展 (Bopomofo Extended)"\u31C0-\u31EF" + // :CJK 笔画 (CJK Strokes)"\u31F0-\u31FF" + // :日文片假名语音扩展 (Katakana Phonetic Extensions)"\u3200-\u32FF" + // :封闭式 CJK 文字和月份 (Enclosed CJK Letters and// Months)"\u3300-\u33FF" + // :CJK 兼容 (CJK Compatibility)"\u3400-\u4DBF" + // :CJK 统一表意符号扩展 A (CJK Unified Ideographs// Extension A)"\u4DC0-\u4DFF" + // :易经六十四卦符号 (Yijing Hexagrams Symbols)"\u4E00-\u9FBF" + // :CJK 统一表意符号 (CJK Unified Ideographs)"\uA000-\uA48F" + // :彝文音节 (Yi Syllables)"\uA490-\uA4CF" + // :彝文字根 (Yi Radicals)"\uA500-\uA61F" + // :Vai"\uA660-\uA6FF" + // :统一加拿大土著语音节补充 (Unified Canadian Aboriginal// Syllabics Supplement)"\uA700-\uA71F" + // :声调修饰字母 (Modifier Tone Letters)"\uA720-\uA7FF" + // :拉丁文扩展-D (Latin Extended-D)"\uA800-\uA82F" + // :Syloti Nagri"\uA840-\uA87F" + // :八思巴字 (Phags-pa)"\uA880-\uA8DF" + // :Saurashtra"\uA900-\uA97F" + // :爪哇语 (Javanese)"\uA980-\uA9DF" + // :Chakma"\uAA00-\uAA3F" + // :Varang Kshiti"\uAA40-\uAA6F" + // :Sorang Sompeng"\uAA80-\uAADF" + // :Newari"\uAB00-\uAB5F" + // :越南傣语 (Vi?t Thái)"\uAB80-\uABA0" + // :Kayah Li"\uAC00-\uD7AF" + // :朝鲜文音节 (Hangul Syllables)// "\uD800-\uDBFF"+//:High-half zone of UTF-16// "\uDC00-\uDFFF"+//:Low-half zone of UTF-16"\uE000-\uF8FF" + // :自行使用区域 (Private Use Zone)"\uF900-\uFAFF" + // :CJK 兼容象形文字 (CJK Compatibility Ideographs)"\uFB00-\uFB4F" + // :字母表达形式 (Alphabetic Presentation Form)"\uFB50-\uFDFF" + // :阿拉伯表达形式A (Arabic Presentation Form-A)"\uFE00-\uFE0F" + // :变量选择符 (Variation Selector)"\uFE10-\uFE1F" + // :竖排形式 (Vertical Forms)"\uFE20-\uFE2F" + // :组合用半符号 (Combining Half Marks)"\uFE30-\uFE4F" + // :CJK 兼容形式 (CJK Compatibility Forms)"\uFE50-\uFE6F" + // :小型变体形式 (Small Form Variants)"\uFE70-\uFEFF" + // :阿拉伯表达形式B (Arabic Presentation Form-B)"\uFF00-\uFFEF" + // :半型及全型形式 (Halfwidth and Fullwidth Form)"\uFFF0-\uFFFF]";// :特殊 (Specials);/*** 将字符串转成unicode** @param str*            待转字符串* @return unicode字符串*/public static String convert(String str) {str = (str == null ? "" : str);String tmp;StringBuffer sb = new StringBuffer(1000);char c;int i, j;sb.setLength(0);for (i = 0; i < str.length(); i++) {c = str.charAt(i);sb.append("\\u");j = (c >>> 8); // 取出高8位tmp = Integer.toHexString(j);if (tmp.length() == 1) {sb.append("0");}sb.append(tmp);j = (c & 0xFF); // 取出低8位tmp = Integer.toHexString(j);if (tmp.length() == 1) {sb.append("0");}sb.append(tmp);}return (new String(sb).toUpperCase());}/*** 2)unicode转成字符串,与上述过程反向操作即可 将unicode 字符串** @param str*            待转字符串* @return 普通字符串*/public static String revert(String str) {str = (str == null ? "" : str);if (str.indexOf("\\u") == -1)// 如果不是unicode码则原样返回return str;StringBuffer sb = new StringBuffer(1000);for (int i = 0; i < str.length() - 6;) {String strTemp = str.substring(i, i + 6);String value = strTemp.substring(2);int c = 0;for (int j = 0; j < value.length(); j++) {char tempChar = value.charAt(j);int t = 0;switch (tempChar) {case 'a':t = 10;break;case 'b':t = 11;break;case 'c':t = 12;break;case 'd':t = 13;break;case 'e':t = 14;break;case 'f':t = 15;break;default:t = tempChar - 48;break;}c += t * ((int) Math.pow(16, (value.length() - j - 1)));}sb.append((char) c);i = i + 6;}return sb.toString();}/**** @author: sunran* @Description:传入需要过滤的字符* @date:  2019年6月11日* @param string* @return*/public static String emojiChange(String string) {try {Pattern pattern = Pattern.compile(unicodeReg);StringBuffer sbBuffer = new StringBuffer();for (int i = 0; i < string.length(); i++) {char c = string.charAt(i);String temp = String.valueOf(c);Matcher matcher = pattern.matcher(temp);if (matcher.find()) {sbBuffer.append(temp);} else {sbBuffer.append("□");}}return sbBuffer.toString();} catch (Exception e) {LogUtil.error(e);}return "";}
}

3、EmojisRequestWrapper 类

package com.frame.web.filter;import cn.hutool.extra.emoji.EmojiUtil;
import com.netinfosz.frame.util.EmojiUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.ByteArrayInputStream;
import java.io.IOException;/*** @author yangguang* @create 2021-12-16 14:24* @desc**/
public class EmojisRequestWrapper extends HttpServletRequestWrapper {/*** ENCODING*/private static final String ENCODING = "UTF-8";public EmojisRequestWrapper(HttpServletRequest request) {super(request);}/*** 字符串去除emoji的方法*/private String convertEmoji2Str(String source) {if(StringUtils.isNotBlank(source)){
//            return source;return EmojiUtils.emojiChange(source);}return "";}/*** 重写getInputStream方法 post请求参数必须通过流才能获取到值*/@Overridepublic ServletInputStream getInputStream() throws IOException {String json = "{}";ServletInputStream stream = super.getInputStream();// 转化成字符串json = IOUtils.toString(stream, ENCODING);//去除表情并返回String noEmojiStr = convertEmoji2Str(json);// 写回requestByteArrayInputStream bis = new ByteArrayInputStream(noEmojiStr.getBytes(ENCODING));ServletInputStream servletInputStream = new ServletInputStream() {@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() throws IOException {return bis.read();}};return servletInputStream;}
}

4、EmojiFilter 类

package com.frame.web.filter;import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author yangguang* @create 2021-12-16 14:24* @desc**/
public class EmojiFilter extends OncePerRequestFilter {private static final String POST = "POST";private static final String PUT = "PUT";@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {//只过滤post和put的请求,不然直接返回if (!request.getMethod().equals(POST) && !request.getMethod().equals(PUT)) {chain.doFilter(request, response);return;}//执行过滤detailEmojisRequestWrapper requestWrapper = new EmojisRequestWrapper(request);chain.doFilter(requestWrapper, response);}
}

java过滤器过滤Emoji 表情相关推荐

  1. java emoji过滤_java过滤emoji表情

    java手机端网页常用的过滤emoji表情,注意:过滤常规emoji表情,iso或安卓一些手机自带的特殊表情不在过滤范围 import java.util.regex.Matcher; import ...

  2. java过滤emoji表情(成功率高)

    转载自:http://blog.csdn.net/huangchao064/article/details/53283738 基本能过滤大部分的ios,安卓,微信emoji表情 有很多别的帖子搜出来很 ...

  3. iOS 过滤emoji表情

    iOS输入框过滤emoji表情 // // ViewController.m // test // // Created by 郭宇 on 13-11-15. // Copyright (c) 201 ...

  4. 匹配表情emoji 正则_详解Android过滤emoji表情正则表达式

    做了一些信息提交的操作,输入了Emoji表情时,后台数据库无法存储 原因:UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去 ...

  5. js过滤emoji表情

    使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错. 原因是因为UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而MySQL的ut ...

  6. java emoji过滤_Android中过滤Emoji表情 完整版

    实际上和Android也没太多关系,主要是数据库没有升级,导致没法存储emoji.另外即使存储了,在其他设备上也不一定能展示出来,所以干脆就过滤掉. 这个与Android无太大关系,主要是获取Emoj ...

  7. java过滤ios表情,JS前端去掉emoji表情和Java后台处理emoji表情方法

    莫非定律 : 任何事情都没表面看去来那么简单! emoji表情在项目中使用,因为其特殊的编码格式,经常导致在网络传输.编解码.以及数据入库中带来一些问题! 下面简单介绍使用Js和java处理移除emo ...

  8. mysql 过滤emoji表情_MySQL中emoji表情过滤

    问题描述 最近在对线上排错过程中发现很多入库时产生的错误日志,表现形态如下 Incorrectstringvalue:'\xF0\x9F\x91\x8D\xE6\x94...'forcolumn'co ...

  9. JS前端去掉emoji表情和Java后台处理emoji表情方法

    莫非定律 : 任何事情都没表面看去来那么简单! emoji表情在项目中使用,因为其特殊的编码格式,经常导致在网络传输.编解码.以及数据入库中带来一些问题! 下面简单介绍使用Js和java处理移除emo ...

最新文章

  1. 边缘的人工智能可以满足许多需求
  2. 最长不下降子序列(推广问题)
  3. html辅助方法引入验证类后怎么写,Html辅助方法
  4. 青少年软件编程等级考试 python-中国电子学会《全国青少年软件编程等级考试标准》升级啦!...
  5. Linux后台运行打包Jar的方法
  6. 爬虫笔记:Requests库详解
  7. 基于Boost::beast模块的协程HTTP服务器
  8. windows cmd 窗口 显示信息慢_Windows系统直接运行Linux,竟是如此简单
  9. vue3源码中的最长递增子序列
  10. TDMoverIP是什么?tdmoverip产品特性介绍
  11. 【UOJ 92】有向图的强连通分量
  12. C++ std::iota递增
  13. AI超人赛车手狂虐人类登Nature封面!1000台PS4训练,「苏菲」极限超车独霸赛道...
  14. centos7网卡编辑_CentOS7网卡命名中碰到的一个坑
  15. mysql延迟注入br,实验3—SQL注入漏洞的攻击与防御(基于时间延迟的盲注)
  16. web developer tips (48):IIS7应用程序池的“Ping”设置可能影响调试
  17. 高级Linux Kernel Inline Hook技术分析与实现
  18. 【学术】论文写作葵花宝典
  19. 【一分钟知识】梯度下降与牛顿法对比
  20. 软考资料合集/软考真题合集(软件设计师/网络工程师/系统分析师/系统架构师/软件测评师/程序员等)

热门文章

  1. 2BizBox合作伙伴火热招募中!!!
  2. javascript in WSH
  3. 关于AFT4引擎的相关
  4. 小程序毕业设计 基于微信电器商城小程序毕业设计参考
  5. 叮当机器人人脸识别插件开发
  6. DDay.iCal - an iCalendar class library
  7. Unity 异步使用Additive加载场景导致的光照贴图出错的坑及解决办法
  8. Android 11.0根据包名授予app所需的权限
  9. c语言程序设计曾怡课件,谭浩强 C语言程序设计教程(由曾怡视频修改) 第8章 函数课件...
  10. 转:MM--公司委托加工流程