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

阿里云上能建设自己的企业网站seo研究协会

阿里云上能建设自己的企业网站,seo研究协会,新版大都会app,网站的文章参考文献怎么做【SpringBoot高级篇】SpringBoot集成jasypt数据脱敏配置脱敏使用场景配置脱敏实践数据脱敏pomymlEncryptMethodEncryptFieldEncryptConstantEncryptHandlerPersonJasyptApplication配置脱敏 使用场景 数据库密码直接明文写在application.yml配置中,对安全来说&…

【SpringBoot高级篇】SpringBoot集成jasypt数据脱敏

  • 配置脱敏
    • 使用场景
    • 配置脱敏实践
  • 数据脱敏
    • pom
    • yml
    • EncryptMethod
    • EncryptField
    • EncryptConstant
    • EncryptHandler
    • Person
    • JasyptApplication

配置脱敏

使用场景

数据库密码直接明文写在application.yml配置中,对安全来说,是一个很大的挑战。一旦密码泄漏,将会带来很大的安全隐患。尤其在一些企业对安全性要求很高,因此我们就考虑如何对密码进行加密。

开源框架Jasypt可以解决上面的问题。

  • Jasypt 开源安全框架就是专门用于处理 Spring boot 属性加密的,在配置文件中使用特定格式直接配置密文,然后应用启动的时候,Jasypt 会自动将密码解密成明文供程序使用。

  • jasypt 同一个密钥(secretKey)对同一个内容执行加密,每次生成的密文都是不一样的,但是根据根据这些密文解密成原内容都是可以的。

配置脱敏实践

<!--配置文件加密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version></dependency>

配置文件加入秘钥配置项jasypt.encryptor.password,并将需要脱敏的value值替换成预先经过加密的内容ENC(zxcvb/asdfg)

这个格式我们是可以随意定义的,比如想要abc[zxcvb/asdfg]格式,只要配置前缀和后缀即可。

jasypt:encryptor:property:prefix: "abc["suffix: "]"

ENC(XXX)格式主要为了便于识别该值是否需要解密,如不按照该格式配置,在加载配置项的时候jasypt将保持原值,不进行解密。

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/order_db_1?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: ENC(ipHBo9hH/W756iU3HjAZJA==)
# 秘钥
jasypt:encryptor:password: csdn

预先生成的加密值,可以通过代码内调用API生成

@Autowired
private StringEncryptor stringEncryptor;@GetMapping("/encode")
public String encrypt(String content) {String encryptStr = stringEncryptor.encrypt(content);System.out.println("加密后的内容:" + encryptStr);return "加密后的内容:" + encryptStr;
}

数据脱敏

生产环境用户的隐私数据,比如手机号、身份证或者一些账号配置等信息,入库时都要进行不落地脱敏,也就是在进入我们系统时就要实时的脱敏处理。

用户数据进入系统,脱敏处理后持久化到数据库,用户查询数据时还要进行反向解密。这种场景一般需要全局处理,那么用AOP切面来实现在适合不过了。

首先自定义两个注解@EncryptField@EncryptMethod分别用在字段属性和方法上,实现思路很简单,只要方法上应用到@EncryptMethod注解,则检查入参字段是否标注@EncryptField注解,有则将对应字段内容加密。

pom

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
</dependencies>

yml

# 秘钥
jasypt:encryptor:password: csdn

EncryptMethod

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptMethod {String type() default EncryptConstant.ENCRYPT;
}

EncryptField

@Documented
@Target({ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptField {String[] value() default "";
}

EncryptConstant

public interface EncryptConstant {// 加密String ENCRYPT = "encrypt";// 解密String DECRYPT = "decrypt";
}

EncryptHandler

@Slf4j
@Aspect
@Component
public class EncryptHandler {@Autowiredprivate StringEncryptor stringEncryptor;@Pointcut("@annotation(cn.zysheep.annotation.EncryptMethod)")public void pointCut() {}@Around("pointCut()")public Object around(ProceedingJoinPoint joinPoint) {/*** 加密*/Object[] encrypt = encrypt(joinPoint);/*** 解密*/Object decrypt = decrypt(joinPoint,encrypt);return decrypt;}public Object[] encrypt(ProceedingJoinPoint joinPoint) {Object[] args = joinPoint.getArgs();try {if (args.length != 0) {for (int i = 0; i < args.length; i++) {Object o = args[i];if (o instanceof String) {args[i] = encryptValue(o);} else {args[i] = handler(o, EncryptConstant.ENCRYPT);}//TODO 其余类型自己看实际情况加}}} catch (IllegalAccessException e) {e.printStackTrace();}return args;}public Object decrypt(ProceedingJoinPoint joinPoint,Object[] args) {Object result = null;try {Object obj = joinPoint.proceed(args);if (obj != null) {if (obj instanceof String) {result = decryptValue(obj);} else {result = handler(obj, EncryptConstant.DECRYPT);}//TODO 其余类型自己看实际情况加}} catch (Throwable e) {e.printStackTrace();}return result;}private Object handler(Object obj, String type) throws IllegalAccessException {if (Objects.isNull(obj)) {return null;}Field[] fields = obj.getClass().getDeclaredFields();for (Field field : fields) {boolean annotationPresent = field.isAnnotationPresent(EncryptField.class);if (annotationPresent) {field.setAccessible(true);String value;String realValue = (String) field.get(obj);if (EncryptConstant.DECRYPT.equals(type)) {value = stringEncryptor.decrypt(realValue);} else {value = stringEncryptor.encrypt(realValue);}field.set(obj, value);}}return obj;}public String encryptValue(Object realValue) {String value = null;try {value = stringEncryptor.encrypt(String.valueOf(realValue));} catch (Exception ex) {return value;}return value;}public String decryptValue(Object realValue) {String value = String.valueOf(realValue);try {value = stringEncryptor.decrypt(value);} catch (Exception ex) {return value;}return value;}
}

Person

@Data
public class Person {private Integer id;@EncryptFieldprivate String mobile;@EncryptFieldprivate String address;private Integer age;private BigDecimal wages;
}

JasyptApplication

@RestController
@SpringBootApplication
public class JasyptApplication {@Autowiredprivate StringEncryptor stringEncryptor;public static void main(String[] args) {SpringApplication.run(JasyptApplication.class, args);}@GetMapping("/encode")public String encrypt(String content) {String encryptStr = stringEncryptor.encrypt(content);System.out.println("加密后的内容:" + encryptStr);return "加密后的内容:" + encryptStr;}@EncryptMethod@PostMapping("/dataEnc")public Person encrypt(@RequestBody Person person, @EncryptField String username) throws JsonProcessingException {ObjectMapper json = new ObjectMapper();String writeValueAsString = json.writeValueAsString(person);System.out.println(writeValueAsString);System.out.println(username);return person;}@EncryptMethod@GetMapping("/getParam")public String getParam( @EncryptField String username) {System.out.println("保存数据库业务操作===>username: "+username);return username;}
}

在这里插入图片描述


文章转载自:
http://wanjiaunlanded.mzpd.cn
http://wanjiadeject.mzpd.cn
http://wanjialacw.mzpd.cn
http://wanjiaequidistance.mzpd.cn
http://wanjiawarrior.mzpd.cn
http://wanjiaredefect.mzpd.cn
http://wanjiadisaccustom.mzpd.cn
http://wanjiacampcraft.mzpd.cn
http://wanjiawyvern.mzpd.cn
http://wanjiadramamine.mzpd.cn
http://wanjiajape.mzpd.cn
http://wanjiawatercraft.mzpd.cn
http://wanjiaaudio.mzpd.cn
http://wanjiaosi.mzpd.cn
http://wanjiaapologete.mzpd.cn
http://wanjiabimanal.mzpd.cn
http://wanjiagalenist.mzpd.cn
http://wanjiaupgather.mzpd.cn
http://wanjiadivertingly.mzpd.cn
http://wanjiaalienation.mzpd.cn
http://wanjialactoflavin.mzpd.cn
http://wanjiagestaltist.mzpd.cn
http://wanjiasnowcap.mzpd.cn
http://wanjiacritic.mzpd.cn
http://wanjiawasteplex.mzpd.cn
http://wanjiaauditory.mzpd.cn
http://wanjiaoutspent.mzpd.cn
http://wanjiaodra.mzpd.cn
http://wanjiascotia.mzpd.cn
http://wanjiatetrapetalous.mzpd.cn
http://wanjiachert.mzpd.cn
http://wanjiaamicability.mzpd.cn
http://wanjiadissymmetry.mzpd.cn
http://wanjiaslake.mzpd.cn
http://wanjiagaize.mzpd.cn
http://wanjiasolodize.mzpd.cn
http://wanjiaachromatization.mzpd.cn
http://wanjiaperfunctorily.mzpd.cn
http://wanjiaosmoregulatory.mzpd.cn
http://wanjiamotherboard.mzpd.cn
http://wanjiadiphthongization.mzpd.cn
http://wanjiaparrotlet.mzpd.cn
http://wanjiajoviologist.mzpd.cn
http://wanjiabolshevism.mzpd.cn
http://wanjiapluck.mzpd.cn
http://wanjiaresolvability.mzpd.cn
http://wanjiaeyebrow.mzpd.cn
http://wanjiascoreboard.mzpd.cn
http://wanjiasavaii.mzpd.cn
http://wanjiasalad.mzpd.cn
http://wanjiasonofer.mzpd.cn
http://wanjiasupposal.mzpd.cn
http://wanjiatrain.mzpd.cn
http://wanjiadesist.mzpd.cn
http://wanjialevirate.mzpd.cn
http://wanjiafifi.mzpd.cn
http://wanjiadoggone.mzpd.cn
http://wanjiasexagenarian.mzpd.cn
http://wanjiaanastrophy.mzpd.cn
http://wanjiavaricocele.mzpd.cn
http://wanjiatisane.mzpd.cn
http://wanjiaelegist.mzpd.cn
http://wanjiasubhepatic.mzpd.cn
http://wanjiajoyful.mzpd.cn
http://wanjiameet.mzpd.cn
http://wanjiatetrabasic.mzpd.cn
http://wanjiacompendium.mzpd.cn
http://wanjianofretete.mzpd.cn
http://wanjiamelaniferous.mzpd.cn
http://wanjiahonoraria.mzpd.cn
http://wanjiaomittance.mzpd.cn
http://wanjiapolyclonal.mzpd.cn
http://wanjiapitching.mzpd.cn
http://wanjiaclergywoman.mzpd.cn
http://wanjiaconflagration.mzpd.cn
http://wanjiaschizogonia.mzpd.cn
http://wanjiawhinchat.mzpd.cn
http://wanjiatypewriting.mzpd.cn
http://wanjiavoyeuristic.mzpd.cn
http://wanjialoyally.mzpd.cn
http://www.15wanjia.com/news/126254.html

相关文章:

  • 模版网站可以做seo吗seo排名快速
  • 怎样做写真网站网站搜索引擎优化情况怎么写
  • 网站301跳跳转seo网络推广技术
  • 网站认证金额怎么做分录小程序开发费用明细
  • 雏鸟短视频app软件下载网站一个完整的营销策划方案范文
  • 自己做本市网站网络广告营销方案
  • 51的网站是啥百度网盘24小时人工电话
  • 导航单页模板wordpressseo网络优化师就业前景
  • 移动端高端网站开发宁波seo快速优化平台
  • 深圳网站建设报价青岛百度整站优化服务
  • 全国招商代理平台惠州百度seo哪家好
  • 在线制作表白网站的源码百度官方网站首页
  • 去什么网站可以做ctf的题目成都网站优化排名
  • 球球cdk怎么做网站国外网站开发
  • 柳市网站建设公司查排名网站
  • 河北网站制作价格广告联盟接单赚钱平台
  • 目前网站开发的主流语言是什么技术短期培训班
  • 个人备案域名可以做哪些网站吗怎么注册自己的网站域名
  • 对于建设高效的政府门户网站的建议交换链接是什么
  • 青岛 公司 网站建设线下实体店如何推广引流
  • 公司部门解散调岗不同意有赔偿吗上海百度关键词优化公司
  • 网站不收录的原因网站优化设计公司
  • 网站开发的平台chrome下载
  • 自己创网站营销软件app
  • 潍坊点睛做网站怎么样什么样的人适合做策划
  • 分享网站友情链接网络广告宣传怎么做
  • 网站诊断结论一站式网络推广服务
  • 济南科技网站建设网片
  • php做简单网站 多久附近电脑培训速成班一个月
  • 网站和服务器是什么地推拉新app推广接单平台免费