springboot 配置项加密

1.项目结构搭建

2.相关依赖

        <!--测试支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--加密支持-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>
        <!--数据库支持-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

 3.application.properties

#jasypt加密的密匙(必须配置)
#jasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7
jasypt.encryptor.password=wxd

#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dongge?serverTimezone=UTC
#spring.datasource.username=root
#spring.datasource.password=kgc

#使用ENC()解密
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=ENC(2br1CumzOtWl+tluAaN7pvWtVsEGtIkEDR9l59aPy+Z+0+xUQPHYjvnL2iYJTz9CSL0G5gQZgyvoQlxNhUjqC9yYgCLoMkTRkEhj2U6jf2TmprYUle0bF/akwwoxmTI1hvp3pHbiB/Q=)
spring.datasource.username=ENC(0aQ/N82hAhpqw3lqKJIPIg==)
spring.datasource.password=ENC(mM+zVO45giLycgS16SmrvQ==)

4.代码实现

DbController

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 测试数据库连接
 */
@RestController
public class DbController {

    @Autowired
    private JdbcTemplate jdbcTemplate;//jdbc的封装

    @RequestMapping("/test")
    public List<Map<String, Object>> getDbType(){
        String sql = "select * from student";
        List<Map<String, Object>> list =  jdbcTemplate.queryForList(sql);
        System.out.println("[map]"+jdbcTemplate.queryForList(sql));
        System.out.println("[list]"+list);
        for (Map<String, Object> map : list) {
            //获得键值对集合
            Set<Map.Entry<String, Object>> entries = map.entrySet();
            if(entries != null) {
                Iterator<Map.Entry<String, Object>> iterator = entries.iterator();//设置迭代器,遍历单个键值对
                while(iterator.hasNext()) {//游标在第一个遍历对象之前
                    Map.Entry<String, Object> entry =iterator.next();
                    Object key = entry.getKey();//列名
                    Object value = entry.getValue();//列值
                    System.out.println(key+":"+value);
                }
            }
        }
        return list;
    }

    @RequestMapping("/getOne")
    public String getOne(){
        String sql = "SELECT studentName FROM student WHERE studentNo=111";
        String rowStudentName = jdbcTemplate.queryForObject(sql, String.class);//studentName ==> String.class
        System.out.println(rowStudentName);
        return rowStudentName;
    }
}

TestListAndMap

package com.example.demo;

import java.util.ArrayList;
import java.util.HashMap;

public class TestListAndMap {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        list.add("w");
        list.add("x");
        list.add("d");
        System.out.println(list);//[]
        HashMap<String,String> map=new HashMap<>();
        map.put("1","sj1");
        map.put("2","sj2");
        map.put("3","sj3");
        System.out.println(map);//{}
    }
}

5.测试

testTest

package com.example.demo;

import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class testTest {
    @Autowired
    StringEncryptor encryptor;

    @Test
    public void getPass() {
        String url = encryptor.encrypt("jdbc:mysql://127.0.0.1:3306/dongge?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8");//连接地址
        String name = encryptor.encrypt("root");//数据库用户名
        String password = encryptor.encrypt("kgc");//数据库密码
        System.out.println("[加密 url]"+url);
        System.out.println("[加密 name]"+name);
        System.out.println("[加密 password]"+password);

        String deUrl=encryptor.decrypt("2br1CumzOtWl+tluAaN7pvWtVsEGtIkEDR9l59aPy+Z+0+xUQPHYjvnL2iYJTz9CSL0G5gQZgyvoQlxNhUjqC9yYgCLoMkTRkEhj2U6jf2TmprYUle0bF/akwwoxmTI1hvp3pHbiB/Q=");
        String deName=encryptor.decrypt("s2aQPTvPjvvMp6s4V/2zkw==");
        String dePwd=encryptor.decrypt("T7lZKsTSWF7fmrpiXcIY/Q==");
        System.out.println("[解密 url]"+deUrl);
        System.out.println("[解密 name]"+deName);
        System.out.println("[解密 password]"+dePwd);

//        //每次加密生成的字符串都能解密成同一个明文,因为解密和加密会对应当时配置的密钥(唯一标识,类似于一个凭证)
//        String deName=encryptor.decrypt("L6tPr3h+iE92ZAluXcmGVQ==");
//        String dePwd=encryptor.decrypt("f8qBh6Ng5O31jilAmCVbtA==");
//        System.out.println(deName);
//        System.out.println(dePwd);
//        String deName2=encryptor.decrypt("IOgKwa5WXT4DwfEvfpAdHg==");
//        String dePwd2=encryptor.decrypt("HeDmiQCRrU91n+B7nMG7rQ==");
//        System.out.println(deName2);
//        System.out.println(dePwd2);
//
//        Assert.assertTrue(name.length() > 0);//满足就放行
//        System.out.println(1);
//        Assert.assertTrue(password.length() >0);
//        System.out.println(2);
    }
}

6.效果

1.url
2br1CumzOtWl+tluAaN7pvWtVsEGtIkEDR9l59aPy+Z+0+xUQPHYjvnL2iYJTz9CSL0G5gQZgyvoQlxNhUjqC9yYgCLoMkTRkEhj2U6jf2TmprYUle0bF/akwwoxmTI1hvp3pHbiB/Q=

2.username

0aQ/N82hAhpqw3lqKJIPIg==

3.password
mM+zVO45giLycgS16SmrvQ==

猜你喜欢

转载自blog.csdn.net/wxd772113786/article/details/103352914
今日推荐