分享几个 SpringBoot 实用的小技巧(下)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 这次分享一些 SpringBoot 使用中的一些小技巧。

创建了一个新的 OrderServiceClient 对象并手动注册进了 Spring 容器中。


第一段代码使用的是 PowerMockito.mock 的 API,他可以创建一个代理对象,让所有调用 OrderServiceClient 的方法都会做默认的返回。


BaseResponse.createSuccess(DateUtil.getLongTime() + "", "mock orderNo success"))


测试一下,当我们没有替换时调用刚才那个接口并且本地也没有启动 OrderService



因为没有配置 fallback 所以会报错,表示找不到这个服务。


替换掉 bean 时:



再次请求没有报错,并且获得了我们默认的返回。



通过日志也会发现 OrderServiceClient 最后已经被 Mock 代理了,并不会去调用真正的方法。


配置加密


下一个则是配置加密,这应该算是一个基本功能。


比如我们配置文件中的一些账号和密码,都应该是密文保存的。


因此这次使用了一个开源组件来实现加密与解密,并且对 SpringBoot 非常友好只需要几段代码即可完成。


  • 首先根据加密密码将需要加密的配置加密为密文。


  • 替换原本明文保存的配置。


  • 再使用时进行解密。


使用该包也只需要引入一个依赖即可:


<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>1.14</version>
</dependency>


同时写一个单测根据密码生成密文,密码也可保存在配置文件中:


jasypt.encryptor.password=123456


接着在单测中生成密文。


@Autowired
    private StringEncryptor encryptor;
    @Test
    public void getPass() {
        String name = encryptor.encrypt("userName");
        String password = encryptor.encrypt("password");
        System.out.println(name + "----------------");
        System.out.println(password + "----------------");
    }


之后只需要使用密文就行。


由于我这里是对数据库用户名和密码加密,所以还得有一个解密的过程。


利用 Spring Bean 的一个增强接口即可实现:


@Component
public class DataSourceProcess implements BeanPostProcessor {
    @Autowired
    private StringEncryptor encryptor;
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof DataSourceProperties){
            DataSourceProperties dataSourceProperties = (DataSourceProperties) bean;
            dataSourceProperties.setUsername(encryptor.decrypt(dataSourceProperties.getUsername())) ;
            dataSourceProperties.setPassword(encryptor.decrypt(dataSourceProperties.getPassword()));
            return dataSourceProperties ;
        }
        return bean;
    }
}


这样就可以在真正使用时还原为明文。


同时也可以在启动命令中配置刚才的密码:


java -Djasypt.encryptor.password=password -jar target/jasypt-spring-boot-demo-0.0.1-SNAPSHOT.jar


相关文章
|
6月前
|
Java
springboot提高编辑Controller和Service层速度和规范小技巧
springboot提高编辑Controller和Service层速度和规范小技巧
|
NoSQL Java 数据库
【SpringBoot2 从0开始】开发小技巧 - lombok、devtools、Spring Initailizr
【SpringBoot2 从0开始】开发小技巧 - lombok、devtools、Spring Initailizr
【SpringBoot2 从0开始】开发小技巧 - lombok、devtools、Spring Initailizr
|
存储 Java 容器
【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧(二)
【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧(二)
147 0
【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧(二)
|
前端开发 Java 网络架构
【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧(一)
【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧(一)
317 0
【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧(一)
|
Java Spring
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(二)
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(二)
102 0
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(二)
|
Java 容器
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)
115 0
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)
|
Java 微服务 Spring
尤娜故事-迷雾-springboot扮酷小技巧
尤娜故事-迷雾-springboot扮酷小技巧
尤娜故事-迷雾-springboot扮酷小技巧
|
Dubbo Java 应用服务中间件
分享几个 SpringBoot 实用的小技巧(上)
这次分享一些 SpringBoot 使用中的一些小技巧。
|
Java 数据库 Spring
springboot(十三):springboot小技巧
一些springboot小技巧、小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JDBC。两种方式各有区别下面来详细介绍。
14335 0
|
监控 安全 Java
SpringBoot实用小技巧之动态设置SpringBoot日志级别
  有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下。此时如果线上想查看调试级别下的日志,又不能更改日志级别后重新发布该怎么办?   Spring Boot提供了日志级别动态配置功能,为我们的线上应用调试提供了很好的机制。
1883 0
下一篇
DataWorks