spring cloud server 加密测试

1. 引入spring cloud server 依赖:

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>版本自选</version>
</dependency>

2. 使用jdk 自带keytool生成密钥对

keytool -genkeypair -alias myalias -keyalg RSA -dname "CN=Web Server,OU=China,O=www.imobpay.com,L=Beijing,S=Beijing,C=China" -keypass biteme -keystore config-service.jks -storepass pwddd

3. 把生成的config-service.jks 放入项目路径

 

 4. 在pom.xml 中加入如下配置:

<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*.jks</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <includes>
                    <include>**/*.jks</include>
                </includes>
            </resource>
        </resources>
    </build>

 

5. 测试代码如下:

import org.springframework.cloud.config.server.encryption.KeyStoreTextEncryptorLocator;
import org.springframework.core.io.ClassPathResource;
import org.springframework.security.crypto.encrypt.TextEncryptor;
import org.springframework.security.rsa.crypto.KeyStoreKeyFactory;

import java.util.Collections;

/**
 * @author margo
 * @title
 * @description 描述
 * @date 2020/6/18 19:32
 */
public class EncryptConfig {

	public static TextEncryptor textEncryptor() {
		KeyStoreTextEncryptorLocator locator = new KeyStoreTextEncryptorLocator(
			new KeyStoreKeyFactory(new ClassPathResource("config-service.jks"),
				"pwddd".toCharArray()),
			"biteme", "myalias");
		TextEncryptor textEncryptor = locator.locate(Collections.<String, String>emptyMap());
		return textEncryptor;
	}

	public static void main(String[] args) {
		TextEncryptor encryptor  = textEncryptor();
		boolean b = encryptor.decrypt(encryptor.encrypt("foo")).equals("foo");
		System.out.println("b = " + b);
	}
}

 

官方测试代码如下:  https://github.com/spring-cloud/spring-cloud-config/blob/master/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/KeyStoreTextEncryptorLocatorTests.java

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

import org.springframework.core.io.ClassPathResource;
import org.springframework.security.crypto.encrypt.TextEncryptor;
import org.springframework.security.rsa.crypto.KeyStoreKeyFactory;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * @author Dave Syer
 *
 */
public class KeyStoreTextEncryptorLocatorTests {

	private KeyStoreTextEncryptorLocator locator = new KeyStoreTextEncryptorLocator(
			new KeyStoreKeyFactory(new ClassPathResource("server.jks"),
					"letmein".toCharArray()),
			"changeme", "mytestkey");

	@Test
	public void testDefaults() {
		TextEncryptor encryptor = this.locator
				.locate(Collections.<String, String>emptyMap());
		assertThat(encryptor.decrypt(encryptor.encrypt("foo"))).isEqualTo("foo");
	}

	@Test
	public void testDifferentKeyDefaultSecret() {
		this.locator.setSecretLocator(new SecretLocator() {

			@Override
			public char[] locate(String secret) {
				assertThat(secret).isEqualTo("changeme");
				// The actual secret for "mykey" is the same as the keystore password
				return "letmein".toCharArray();
			}
		});
		TextEncryptor encryptor = this.locator
				.locate(Collections.<String, String>singletonMap("key", "mykey"));
		assertThat(encryptor.decrypt(encryptor.encrypt("foo"))).isEqualTo("foo");
	}

	@Test
	public void testDifferentKeyAndSecret() {
		Map<String, String> map = new HashMap<String, String>();
		map.put("key", "mytestkey");
		map.put("secret", "changeme");
		TextEncryptor encryptor = this.locator.locate(map);
		assertThat(encryptor.decrypt(encryptor.encrypt("foo"))).isEqualTo("foo");
	}

	@Test
	public void testDefaultEncryptor() {
		TextEncryptor encryptor1 = this.locator
				.locate(Collections.<String, String>emptyMap());
		TextEncryptor encryptor2 = this.locator
				.locate(Collections.<String, String>emptyMap());
		assertThat(encryptor1).isEqualTo(encryptor2);
	}

}

  

 

 

 

 

 

 

posted @ 2020-06-19 09:57  margo  阅读(161)  评论(0)    收藏  举报