修改网关调用问题

This commit is contained in:
panxuejie 2026-01-06 13:55:42 +08:00
parent 70c5bf42b8
commit f777182f96
3 changed files with 94 additions and 0 deletions

View File

@ -0,0 +1,17 @@
package com.tacit.common.utils;
import org.springframework.security.crypto.password.PasswordEncoder;
public class AesPasswordEncoder implements PasswordEncoder {
@Override
public String encode(CharSequence rawPassword) {
return AesUtils.encrypt(rawPassword.toString());
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
String decrypted = AesUtils.decrypt(encodedPassword);
return rawPassword.toString().equals(decrypted);
}
}

View File

@ -0,0 +1,62 @@
package com.tacit.common.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Base64;
public class AesUtils {
private static final String ALGORITHM = "AES/GCM/NoPadding";
private static final int GCM_IV_LENGTH = 12;
private static final int GCM_TAG_LENGTH = 128;
private static final String SECRET_KEY = "tacit123456789012";
public static String encrypt(String plainText) {
try {
byte[] iv = new byte[GCM_IV_LENGTH];
SecureRandom random = new SecureRandom();
random.nextBytes(iv);
SecretKeySpec secretKey = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), "AES");
Cipher cipher = Cipher.getInstance(ALGORITHM);
GCMParameterSpec parameterSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, parameterSpec);
byte[] encryptedText = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
byte[] combined = new byte[iv.length + encryptedText.length];
System.arraycopy(iv, 0, combined, 0, iv.length);
System.arraycopy(encryptedText, 0, combined, iv.length, encryptedText.length);
return Base64.getEncoder().encodeToString(combined);
} catch (Exception e) {
throw new RuntimeException("AES加密失败", e);
}
}
public static String decrypt(String encryptedText) {
try {
byte[] combined = Base64.getDecoder().decode(encryptedText);
byte[] iv = new byte[GCM_IV_LENGTH];
System.arraycopy(combined, 0, iv, 0, GCM_IV_LENGTH);
byte[] encryptedData = new byte[combined.length - GCM_IV_LENGTH];
System.arraycopy(combined, GCM_IV_LENGTH, encryptedData, 0, encryptedData.length);
SecretKeySpec secretKey = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), "AES");
Cipher cipher = Cipher.getInstance(ALGORITHM);
GCMParameterSpec parameterSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKey, parameterSpec);
byte[] decryptedText = cipher.doFinal(encryptedData);
return new String(decryptedText, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException("AES解密失败", e);
}
}
}

View File

@ -0,0 +1,15 @@
package com.tacit.app.config;
import com.tacit.common.utils.AesPasswordEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class AppSecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new AesPasswordEncoder();
}
}