日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Boot 實現(xiàn)敏感詞及特殊字符過濾處理

瀏覽:72日期:2023-07-05 16:36:49
背景:

技術(shù)采用的是 Spring Boot ,請求方法主要為 POST, 請求使用較多的注解為 @RequestBody

交付測試人員進行測試,測試人員在對模糊搜索模塊進行了各種特殊字符的搜索,以至于敏感詞和特殊字符均會入庫。

對于我這樣有情懷的開發(fā)者而言,是不能容忍的。

上來就是干!主要采用

@ControllerAdvice(basePackages = 'com.my')

的方式,對用戶提交的數(shù)據(jù)做處理。

以下是示例代碼,不影響筆者要言表的功能實現(xiàn):

/** * @author Ryan * @date 2019/4/25 18:41 */@ControllerAdvice(basePackages = 'com.ytkj')public class EscapeSensitiveWordFilter implements RequestBodyAdvice { @Override public boolean supports(MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {return true; } @Override public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException {return inputMessage; } @Override public Object afterBodyRead(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {if(o != null){ SensitiveWordUtils.apply(o);}return o; } @Override public Object handleEmptyBody(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {return o; }}

由于我們主要針對提交的數(shù)據(jù)做處理,主要入口在 SensitiveWordUtils.apply(o); 這里的 “Object ” 參數(shù),其實也就是我們 Controller 方法參數(shù)中,打了 @RequestBody 的實體。我們可以直接在這里,使用一些手段做處理即可。

這里的手段,也只能使用反射了(如果讀者有什么好的方案可以告訴我)。

1. 字符串替換;

2. 自定義拋出運行時異常;

這樣做的另外一個好處就是,可以在這里統(tǒng)一管理敏感詞。

如果你使用 replaceAll 的話,統(tǒng)一管理上就比較費勁了。

最后,筆者把自己寫的反射放在下面,僅供參考,敏感詞替換部分寫了一個“測試“ 作為要替換入口的標(biāo)記。

歡迎各界大佬來扶正!

import java.lang.reflect.Field;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Map;/** * @author Ryan * @date 2019/4/26 12:40 */public class SensitiveWordUtils { /** * @param result * @return */ public static Object apply(Object result) {if (result == null) { return null;}objectParse(result);return result; } /** * @param obj */ public static void objectParse(Object obj) {List<Field> allField = findAllField(obj);for (Field field : allField) { field.setAccessible(true); Class<?> typeClazz = field.getType(); matchFieldType(obj, field, typeClazz);} } public static List<Field> findAllField(Object object){List<Field> result = new ArrayList<>();Class<?> clazz = object.getClass();while (true) { clazz = clazz.getSuperclass(); if (clazz == Object.class) {break; } Field[] declaredFields = clazz.getDeclaredFields(); result.addAll(Arrays.asList(declaredFields));}return result; } /** * @param obj * @param field * @param clazz */ public static <T> void matchFieldType(Object obj, Field field, T clazz) {try { T param = (T) field.get(obj); if(param == null){return; } if (clazz == List.class) {List p = (List)param;for (Object o : p) { objectParse(o);} } else if (clazz == String.class) {setValue(obj, field, '測試'); } else if (clazz == Map.class) {Map map = (Map)param;for (Object o : map.keySet()) { objectParse(o);} }} catch (IllegalAccessException e) { e.printStackTrace();} } /** * * @param object * @param field * @param param * @throws IllegalAccessException */ public static void setValue(Object object, Field field, Object param) throws IllegalAccessException {if(!field.isAccessible()){ throw new IllegalAccessException('modify the field fail.');}field.set(object, param); }}

這里的 SensitiveWordUtils 還有很大的優(yōu)化點,我在這里沒有目前只是看看效果,寫的很粗糙,望大神不要噴。

讀者自行實現(xiàn)一下,我說一下優(yōu)化點:

1. 緩存 object 的 String.class 類型的 Field 或者 methodName; 在第一次加載的時候,緩存進去;放到 ConcurrentHashMap<ObjectType, List<StringField>> , 是不是感覺清爽了好多;

2. 過濾出來 String 類型的 Field ,其他的類型酌情考慮;

3. 等臣妾的再想想;

Spring Boot 統(tǒng)一敏感詞過濾 demo

對象序列化前的處理

例如springframework框架(responseBody)json 格式:

org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyAdviceChain#beforeBodyWrite

中進行對象數(shù)據(jù)的轉(zhuǎn)換。

@ControllerAdvice@Slf4jpublic class ShanDongShengYuHandler implements ResponseBodyAdvice { @Autowired private ObjectMapper objectMapper; @Override public boolean supports(MethodParameter returnType, Class converterType) {return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {ResponseData d = new ResponseData();sensitiveHidden(body);d.setData(body);return d; } /** * 只支持自定義類型數(shù)據(jù)的敏感詞過濾,考慮遞歸性能 */ private void sensitiveHidden(Object body) {if(body==null || StringUtils.isBlank(body.getClass().getName()) || !body.getClass().getName().contains('山東')){ return;}Field[] declaredFields = body.getClass().getDeclaredFields();for (Field declaredField : declaredFields) { SensitiveWorldHidden annotation = declaredField.getAnnotation(SensitiveWorldHidden.class); log.warn('【注解類型】{}',annotation); try {declaredField.setAccessible(true);Object o = declaredField.get(body);if(annotation != null) { String content = objectMapper.writeValueAsString(o); content = content.replace('垃圾', '**'); Object replaced = objectMapper.readValue(content, o.getClass()); declaredField.set(body, replaced);}else { sensitiveHidden(o);} } catch (IllegalAccessException e) {e.printStackTrace(); } catch (JsonProcessingException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); }} }}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文一区一区三区高中清不卡免费| 精品一区二区三区中文字幕视频| 98精品视频| 动漫av一区| 精品久久久久中文字幕小说| 麻豆久久久久久| 国产一区丝袜| 色偷偷色偷偷色偷偷在线视频| 正在播放日韩精品| 今天的高清视频免费播放成人| 久久久久久久久久久9不雅视频| 久久蜜桃资源一区二区老牛| 欧美精品一二| 欧美日韩一区二区三区视频播放| 99国产精品一区二区| 午夜国产一区二区| 免费精品视频| 午夜电影一区| 欧美久久精品| 国产精久久一区二区| 久久久久久亚洲精品美女| 国产精品久久久久久久久久10秀| 亚洲天堂免费电影| 激情自拍一区| 日韩一区精品| 欧美91在线| 日韩中文在线电影| 国产亚洲亚洲| 亚洲专区视频| 国产精品亚洲人成在99www | 午夜精品免费| 亚洲精品伦理| 久久影院资源站| 99视频精品视频高清免费| 国产精品丝袜xxxxxxx| 日韩一区网站| 91亚洲一区| 亚洲一区区二区| 国产精品红桃| 激情综合自拍| 国产另类在线| 欧美日韩一区二区综合| 中文欧美日韩| 国产精品一区二区av交换| 欧美日韩精品免费观看视欧美高清免费大片 | 国产在线欧美| 日本va欧美va精品发布| 麻豆精品av| 一区福利视频| 国产精品qvod| 伊人影院久久| 国产精品1区| 欧美日韩国产一区精品一区| 日韩有吗在线观看| 日韩电影二区| 亚洲欧美在线综合| 国产资源在线观看入口av| 久久成人一区| 福利一区二区三区视频在线观看| 国产模特精品视频久久久久| 欧美精品91| 99在线|亚洲一区二区| 嫩草伊人久久精品少妇av杨幂 | 日韩美女国产精品| 国产在线观看www| 亚洲视频二区| 亚洲美女久久精品| 日韩高清一区| 激情欧美一区二区三区| 老牛国内精品亚洲成av人片| 久久高清国产| 日韩理论片av| 欧美私人啪啪vps| 国产午夜精品一区二区三区欧美 | 不卡av一区二区| 美女免费视频一区| 亚洲日产av中文字幕| 久久久人人人| 国产乱子精品一区二区在线观看 | 在线看片国产福利你懂的| 亚洲深深色噜噜狠狠爱网站| 日本久久成人网| 国产精品第十页| 亚洲一区二区日韩| 久久精品影视| 超碰成人av| 久久不卡国产精品一区二区| 在线视频精品| 亚洲精品福利电影| 免费亚洲婷婷| 国产日韩欧美一区在线| 影音先锋久久精品| 国产精品嫩草99av在线| 婷婷激情久久| 激情国产在线| 久久麻豆视频| 国产精品最新自拍| 97久久亚洲| 亚洲精品乱码| 久久av一区| 午夜亚洲福利在线老司机| 久久久久国产| 久久电影tv| 成人午夜网址| 久久精品日韩欧美| 国产精品日本一区二区不卡视频| 亚洲精品乱码| 一区二区三区午夜视频| 亚洲深夜福利| 国产婷婷精品| 中文精品视频| 国产农村妇女精品一二区| 国产精品99一区二区| 国产99精品| 91久久久精品国产| 国产一区欧美| 午夜久久99| 亚洲婷婷免费| 国产高清一区| 日韩午夜精品| 三级一区在线视频先锋| 水野朝阳av一区二区三区| 亚洲欧美不卡| 在线精品福利| 日韩精品免费观看视频| 午夜视频一区二区在线观看| 日韩有码av| 91大神在线观看线路一区| 日韩一区二区三区精品| 日韩精品久久理论片| 国产乱子精品一区二区在线观看 | 国产精品xvideos88| 国产精品jk白丝蜜臀av小说| 久久不见久久见中文字幕免费 | 欧美日韩国产综合网| 午夜视频精品| 中文精品电影| 欧美日韩亚洲一区三区| 青青在线精品| 麻豆久久一区二区| 日韩精品1区| 欧美在线影院| 四虎精品永久免费| 久久国产乱子精品免费女| 国产精品日韩精品中文字幕| 精品精品久久| 婷婷成人在线| 在线免费观看亚洲| 国产亚洲人成a在线v网站| 麻豆精品视频在线观看视频| 中文字幕在线看片| 欧美日韩国产一区精品一区| 亚洲乱码视频| 国产精品日韩精品在线播放| 国产+成+人+亚洲欧洲在线| 99久久亚洲精品| 久久亚洲二区| 国产精品中文| av亚洲一区二区三区| 蜜乳av另类精品一区二区| 日韩不卡一区二区三区| 国内一区二区三区| 欧美日韩国产免费观看视频| 日韩免费精品| 国产欧美一区二区三区精品酒店| 亚洲免费精品| 国产欧美日韩视频在线| 日韩久久电影| 美国欧美日韩国产在线播放| 国产精品一区二区三区美女 | 欧美高清一区| 日本a级不卡| 樱桃视频成人在线观看| 国产精品日韩欧美一区| 国产精品一站二站| 亚洲香蕉网站| 国产亚洲字幕| 啪啪国产精品| 亚洲美女久久| 日韩a一区二区| 日韩在线一区二区| 国产一区二区三区亚洲| 久久国产成人| www.九色在线| 日本一区二区三区视频在线看 | 日韩精品一二三区| 久久久精品国产**网站| 国产婷婷精品| 成人在线观看免费视频| 精品91久久久久| 欧美黄色一区二区| 亚洲神马久久| 欧美国产一级| 日韩手机在线| 亚洲天堂久久| 狂野欧美性猛交xxxx| 免费观看久久久4p| 日韩免费小视频| 91精品国产自产精品男人的天堂| 免费精品国产的网站免费观看|