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

您的位置:首頁技術文章
文章詳情頁

Spring Boot 實現敏感詞及特殊字符過濾處理

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

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

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

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

上來就是干!主要采用

@ControllerAdvice(basePackages = 'com.my')

的方式,對用戶提交的數據做處理。

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

/** * @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; }}

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

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

1. 字符串替換;

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

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

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

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

歡迎各界大佬來扶正!

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 還有很大的優化點,我在這里沒有目前只是看看效果,寫的很粗糙,望大神不要噴。

讀者自行實現一下,我說一下優化點:

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

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

3. 等臣妾的再想想;

Spring Boot 統一敏感詞過濾 demo

對象序列化前的處理

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

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

中進行對象數據的轉換。

@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; } /** * 只支持自定義類型數據的敏感詞過濾,考慮遞歸性能 */ 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(); }} }}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品网站999| 日韩精品一二区| 欧美偷窥清纯综合图区| 日韩精品免费视频一区二区三区| 日本亚洲最大的色成网站www | 亚洲综合在线电影| 亚洲无线一线二线三线区别av| 国户精品久久久久久久久久久不卡| 五月精品视频| 日本色综合中文字幕| 久久三级中文| 免费观看亚洲| 视频精品一区二区| 麻豆久久久久久| 欧美亚洲国产一区| 日韩黄色在线观看| 欧美男人天堂| 中文字幕中文字幕精品| 国产精品三级| 久久婷婷av| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 国产极品一区| 午夜欧美巨大性欧美巨大| 国产视频久久| 精品久久久久久久| 国产精品美女久久久| 国产日韩欧美一区| 久久美女性网| 国产亚洲精品美女久久 | 国产精品国码视频| 国精品一区二区| 国产精品超碰| 红桃视频国产精品| 麻豆极品一区二区三区| 免费看av不卡| 亚洲a成人v| 日韩高清欧美| 青草av.久久免费一区| 久久久精品久久久久久96| 欧美日韩亚洲一区在线观看| 欧美1区免费| 日本a级不卡| 99pao成人国产永久免费视频| 久久精品五月| 日韩精品三区四区| 91成人超碰| 久久中文在线| 在线精品一区| 国产综合色产| 久久不见久久见国语| 一本一道久久a久久精品蜜桃| 久久精品国产网站| 日本精品国产| 亚洲综合日本| 91精品国产调教在线观看| 国产欧美自拍一区| 亚洲影院天堂中文av色| 久久九九99| 国产成人精品999在线观看| 日本va欧美va精品发布| 中文一区在线| 91精品精品| а√天堂8资源在线| 国产图片一区| 久久福利精品| 国产高清一区二区| а√在线中文在线新版| 国产精品igao视频网网址不卡日韩| 亚洲一区二区日韩| 日韩一级不卡| 国产一在线精品一区在线观看| 成人在线视频免费| 你懂的国产精品| 久久国产精品色av免费看| 久久国产精品亚洲77777| 欧美日韩在线二区| 久久久9色精品国产一区二区三区| 国语精品一区| 国产一区二区三区国产精品| 欧美一区影院| 日本免费新一区视频| 亚洲+小说+欧美+激情+另类| 久久高清国产| 亚洲欧美日韩视频二区| 伊人久久成人| 黄色成人91| 免费成人性网站| 欧美高清一区| 另类小说一区二区三区| 日日夜夜免费精品视频| 免费在线观看成人| 亚洲欧美日韩专区| 日韩在线一区二区| 亚洲人妖在线| 日韩午夜av在线| 久久先锋影音| 日韩精品免费视频人成| 国产日产精品_国产精品毛片 | 国产一区三区在线播放| 国产一区二区久久久久| 久久国际精品| 美女视频黄 久久| 免费观看不卡av| 成人国产精品一区二区网站| 国产精品13p| 超碰超碰人人人人精品| 97精品视频在线看| 亚洲天堂1区| re久久精品视频| 久久亚洲色图| 久久精品超碰| 精品久久久亚洲| 日韩三区免费| 中文一区在线| 9国产精品视频| 日韩精品一区二区三区免费视频 | 日韩网站中文字幕| 在线午夜精品| 国产亚洲精品精品国产亚洲综合| 免费一级欧美在线观看视频| yellow在线观看网址| 不卡一区2区| 日韩精品91亚洲二区在线观看| 国产精品午夜一区二区三区| 一区二区精品伦理...| 女同性一区二区三区人了人一 | 成人自拍av| 精品久久不卡| 国产欧美自拍| 国产亚洲毛片| 日本一区二区三区视频在线看 | 中文欧美日韩| 国产伦精品一区二区三区在线播放| 国产精品99在线观看| 五月婷婷六月综合| 欧美日韩xxxx| 三级精品视频| 日精品一区二区三区| 久久精品72免费观看| 国产美女高潮在线| 亚洲欧美日韩国产一区二区| 国产精品久久久久久模特| 99国产精品一区二区| 日韩超碰人人爽人人做人人添| 亚洲国产欧美日本视频| 蜜臀av一区二区三区| 精品国产成人| 免费看日韩精品| 福利视频一区| 日本不卡的三区四区五区| 亚洲伦乱视频| 亚洲精品伦理| 四虎4545www国产精品 | 国产精品一区高清| 婷婷综合亚洲| 久久精品二区亚洲w码| 日韩制服丝袜先锋影音| 福利在线免费视频| 日韩精品欧美成人高清一区二区| 日韩影院二区| 国产日韩亚洲欧美精品| 最新亚洲激情| 免费观看亚洲| 国产精品视频一区二区三区四蜜臂| 在线亚洲人成| 久久国产精品免费一区二区三区| 九九久久电影| 韩国久久久久久| 91精品尤物| 玖玖玖国产精品| 久久国产成人午夜av影院宅| 麻豆国产精品| 视频一区在线播放| 欧美日韩一区二区综合| 精品一区二区三区的国产在线观看| 影音先锋久久精品| 婷婷亚洲五月色综合| 92国产精品| 精品久久91| 欧美啪啪一区| 亚洲一区二区三区四区电影 | 色综合视频一区二区三区日韩| 欧美成a人国产精品高清乱码在线观看片在线观看久| 日本综合精品一区| 老色鬼久久亚洲一区二区| 最新中文字幕在线播放| 美女毛片一区二区三区四区最新中文字幕亚洲 | 亚洲一区日韩| 久久精品成人| 久久九九电影| 中文在线免费视频| 欧美激情另类| 成人污污视频| 黄色欧美在线| 精品国产精品国产偷麻豆| 国产欧美精品| 国产色99精品9i| 欧美成人aaa| 国产精品qvod| 国产精品tv|