当前位置: 首页 > news >正文

找做废薄膜网站百度首页排名优化哪家专业

找做废薄膜网站,百度首页排名优化哪家专业,西部数码域名网站模板,溧阳企业网站建设价格springboot实现数据脱敏 怎么说呢,写着写着发觉 ”这写的什么玩意“ 。 总的来说就是,这篇文章并不能解决数据脱敏问题,但以下链接可以。 SpringBoot中利用自定义注解优雅地实现隐私数据脱敏 然后回到本文,本来是想基于AOP代理&am…

springboot实现数据脱敏

  • 怎么说呢,写着写着发觉 ”这写的什么玩意“ 。

    总的来说就是,这篇文章并不能解决数据脱敏问题,但以下链接可以

    SpringBoot中利用自定义注解优雅地实现隐私数据脱敏

    然后回到本文,本来是想基于AOP代理,实现返回数据脱敏的,具体流程是:

    1. 在controller做切面,实现返回通知

    2. 返回通知中获取返回值对象

    3. 利用反射获取返回值字段

    4. 标有脱敏注释的字段做脱敏处理

    说着好像一套一套的,但事实上,忽略了一个重要的问题,复杂对象很难做反射,例如集合List,Set,Map,或者对象的引用也是对象,就算用多重判断深度遍历,但是反射带来的耗时以及空间开销都是值得思考的,总而言之,这是一个很low的方案。

    但是我很少用到反射,并且感觉既然都写到这了,不如记录一下,aop和反射结合,以后可能会用来实现其他有趣的功能也说不定。那就记录一下吧。

1. 引入依赖

        <!-- 引入aop支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

2. 实现两个注解

一个标注在controller方法上,Service也可以

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DesensitizeResult {}

一个标注在属性上

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DesensitizeField {// 字段名称,给字段起个名字而已,没啥用String name() default "字段名";// 前面正常显示字符长度(不脱敏长度)int prefixShow() default 1;// 后面正常显示字符长度(不脱敏)长度int suffixShow() default 0;// 脱敏引用符号String symbol() default "*";
}

3. 编写切面方法类

@Aspect
@Component
public class DesensitizeAspect {@Pointcut("@annotation(com.example.testdemo.annotation.DesensitizeResult)")public void getDesensitizeAnno(){}/*** 返回贴面编程,对返回结果result做脱敏操作* @param joinPoint 切点* @param result 目标方法返回结果*/@AfterReturning(pointcut = "getDesensitizeAnno()",returning = "result")public void afterReturn(JoinPoint joinPoint,Object result){// 获取返回结果类的所有属性数组Class resultClass = result.getClass();Field[] declaredFields = resultClass.getDeclaredFields();for (Field field : declaredFields){// 循环判断属性中是否存在自定义脱敏注解@DesensitizeFieldfor (Annotation annotation : field.getAnnotations()) {Class<? extends Annotation> aClass = annotation.annotationType();if (aClass.equals(DesensitizeField.class)){DesensitizeField desensitizeField = (DesensitizeField) annotation;// 对标有@DesensitizeField的属性进行脱敏处理field.setAccessible(true);      // 先将该属性改为允许值修改try {String originStr = (String)field.get(result);   // 获取原来的值// 字符串脱敏String desensitizeValue = this.desensitizeStr(originStr, desensitizeField.prefixShow(),desensitizeField.suffixShow(), desensitizeField.symbol());field.set(result,desensitizeValue); // 将脱敏后的字符串写入} catch (IllegalAccessException e) {throw new RuntimeException(e);}}}}}/*** * @param originStr 原字符串* @param prefixShow 前置正常字符串长度* @param suffixShow 后置正常字符串长度* @param symbol 脱敏字符显示标志* @return 脱敏后字符串*/private String desensitizeStr(String originStr, int prefixShow, int suffixShow, String symbol){int length = originStr.length();// 避免out of indexprefixShow = Math.min(prefixShow, length);suffixShow = Math.min(suffixShow,length);// 前后显示数据超过数据是指长度处理,OutOfRange处理if (prefixShow+suffixShow>length){prefixShow=length;suffixShow=0;}String desensitizeValue = originStr.substring(0,prefixShow)+symbol.repeat(length-prefixShow-suffixShow)+originStr.substring(length-suffixShow);return desensitizeValue;}}

如上代码所示,只是针对单个简单对象做字段脱敏,复杂对象就完了

4. 测试实体类

@Data
@ToString
public class UserInfo {private String id;private String account;private String nickname;@DesensitizeField(name = "真实姓名",prefixShow = 1)private String realName;@DesensitizeField(name = "密码",prefixShow = 0)private String password;@DesensitizeField(name = "手机号",prefixShow = 3,suffixShow = 1)private String mobile;@DesensitizeField(name = "身份证号",prefixShow = 3)private String identityId;private String createTime;}

5. 测试接口

@RestController
public class TestController {@DesensitizeResult  // aop切面脱敏数据@GetMapping("/userInfo")public UserInfo getUserInfo(){UserInfo userInfo = new UserInfo();userInfo.setId("123456");userInfo.setAccount("abcdef");userInfo.setMobile("13579246810");userInfo.setNickname("BigBoss");userInfo.setRealName("张小凡");userInfo.setIdentityId("430121200001011321");userInfo.setPassword("Mm123456#");return userInfo;}
}

6.测试

image-20231127195103232.png

至此,全文完毕,另外盘算着下次把上面链接的方案偷过来再发一篇。

http://www.zhongyajixie.com/news/33499.html

相关文章:

  • 专业工厂网站建设慈溪seo排名
  • 手机网站加百度商桥学推广网络营销去哪里
  • 表格里怎么做链接网站谷歌搜索引擎镜像入口
  • 网站移动适配怎么做中关村标准化协会
  • 淘宝做的网站靠谱吗关键词歌词简谱
  • 做网站建设价格营销自动化
  • 内黄县建设局网站百度搜索关键词指数
  • 网站建设市场多大海外建站
  • 网站 免费 托管运营免费制作网站平台
  • 新河企业做网站2022真实新闻作文400字
  • 地方文明网站建设网络优化有前途吗
  • 做网站的代码难吗商城推广
  • 好的建设网站公司哪家好网站收录怎么做
  • WordPress邮件代发seo的名词解释
  • 企业网站html模板下载域名注册好了怎么弄网站
  • 载wordpressseo词库排行
  • 南京做网站公司软件培训机构排名
  • 湖南做网站哪家好建立网站平台需要多少钱
  • 做旅游网站的目标手游推广加盟
  • 江苏省建设厅网站资质升级推广网站怎么制作
  • 电脑装wordpress优化排名案例
  • 广州网站建设推广公司百度认证官网申请
  • 建筑模板尺寸规格及价格厦门seo外包公司
  • 网站做次级页面关键词权重查询
  • 网站seo重庆徐州seo培训
  • 做网站分流互联网营销师培训机构哪家好
  • 怎么做网站访问截取ip推广方式营销方案
  • 网站建设 需求确认书怎么制作网页页面
  • asp程序制作网站免费html网页模板
  • 山西省住房和城乡建设厅官方网站网络营销的原理