SpringBoot集成jasypt对yml文件指定参数加密并自定义@bean隐藏密钥

1、查看SpringBoot和jasypt对应版本。
Jasypt 1.9.x 通常与 Spring Boot 1.5.x 相对应。
Jasypt 2.1.x 通常与 Spring Boot 2.0.x 相对应。
Jasypt 3.x 通常与 Spring Boot 2.1.x相对应。
2、引入maven

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

3、新建JasyptController方法来获取加密解密、也可以用main方法获取。

@RequestMapping("/m")
public class JasyptController {

    @GetMapping("/o")
    public String output(String key) {
        String message = "www.baidu,com";
        String strJasyp = stringEncryptor(message, key, true);
        return "ENC("+strJasyp+")";
    }

    @PostMapping("/s")//这里使用JSONObject 接收、防止有特殊符号被转义掉。
    public String select(@RequestBody JSONObject jsonObject) {
        String message = "www.baidu,com";
        String jasyptEncrypt1 = stringEncryptor(message, jsonObject.getString("key"), false);
        return jasyptEncrypt1;
    }
    
    public static String stringEncryptor(String secretKey, String message, boolean isEncrypt) {
        PooledPBEStringEncryptor pooledPBEStringEncryptor = new PooledPBEStringEncryptor();
        pooledPBEStringEncryptor.setConfig(getSimpleStringPBEConfig(secretKey));
        String result = isEncrypt ? pooledPBEStringEncryptor.encrypt(message) : pooledPBEStringEncryptor.decrypt(message);
        return result;
    }
    
    private static PBEConfig getSimpleStringPBEConfig(String secretKey) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(secretKey);
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        config.setPoolSize("1");
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");//加密方法
        config.setKeyObtentionIterations("1000");
        config.setProviderName("SunJCE");
        return config;
    }

    public static void main(String[] args) throws Exception {
        String message = "www.baidu,com";//密钥
        String password = "www";
        String passwordJasyp = stringEncryptor(message, password, true);
        System.out.println("password:ENC("+passwordJasyp+")");
        
        String jasyptEncrypt = stringEncryptor(message, "加密后的字符串", false);
        System.out.println(jasyptEncrypt);
    }

}

4、加密后的密码放入对应的配置文件里面。加密后的密码要放入ENC()进行后续解析。并加入jasypt配置。

driver-class-name: dm.jdbc.driver.DmDriver
url: ENC(19ZBcsVnQdVRRQwsQyqyiCwI1Rf7jmB/2H6VXeSSaKGpzy2UU1+L1pM6/lrfNQnbCo=)
username: ENC(9Df7wDeAaOpDmWp/l6cuJRwyCZNd/KCN)
password: ENC(U+A2cGFir41Uaf1/BzNT3G9ecYw6)
jasypt:
  encryptor:
    bean: encryptorBean //此处为自定义,用来隐藏密钥,不在环境配置及配置文件直接出现。

5、增加@Bean(“encryptorBean”)进行秘钥等配置解析。

@Configuration
public class JasyptConfig {

    @Bean("encryptorBean")
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("www.baidu.com");
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }

}
好的,下面是使用Spring Boot实现密码显示与隐藏的代码示例: 首先,需要在前端页面上添加一个密码输入框和一个切换按钮,用于切换密码的显示和隐藏状态: ```html <div class="form-group"> <label for="password">Password:</label> <div class="input-group"> <input type="password" class="form-control" id="password" name="password" placeholder="Enter password"> <div class="input-group-append"> <button class="btn btn-outline-secondary" type="button" id="togglePassword">Show</button> </div> </div> </div> ``` 然后,在后端Controller中添加一个接口,用于返回密码显示与隐藏的状态: ```java @RestController public class PasswordController { private boolean passwordVisible = false; @GetMapping("/api/password/visible") public boolean getPasswordVisible() { return passwordVisible; } @PostMapping("/api/password/visible") public void setPasswordVisible(@RequestBody boolean visible) { passwordVisible = visible; } } ``` 在上面的代码中,我们使用一个变量`passwordVisible`来保存密码的显示和隐藏状态,且提供了两个接口`/api/password/visible`,一个用于获取当前的状态,另一个用于设置新的状态。 接下来,在前端页面的JavaScript代码中,使用jQuery实现密码切换按钮的功能: ```javascript $(document).ready(function() { $('#togglePassword').click(function() { var passwordField = $('#password'); var passwordVisible = !passwordField.prop('type') || passwordField.prop('type') === 'password'; $.ajax({ url: '/api/password/visible', type: 'POST', data: JSON.stringify(passwordVisible), contentType: 'application/json', success: function() { passwordField.prop('type', passwordVisible ? 'text' : 'password'); $('#togglePassword').text(passwordVisible ? 'Hide' : 'Show'); } }); }); }); ``` 在上面的代码中,我们首先获取密码输入框的元素`$('#password')`,然后根据当前的状态来判断密码是否应该显示。接下来,使用jQuery的`$.ajax`方法向后端Controller发送一个POST请求,将新的状态保存到服务器端。最后,根据新的状态来更新密码输入框和切换按钮的文本。 到此为止,我们已经完成了使用Spring Boot实现密码显示与隐藏的代码。当用户点击“Show”按钮时,密码将显示出来,同时按钮的文本也会变成“Hide”;当用户再次点击“Hide”按钮时,密码将被隐藏起来,按钮的文本也会变成“Show”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值