在Spring Boot应用程序中,我想从一个REST服务传递一个组合变量,通过用户界面传递,然后再传回第二个REST服务。为了实现这一点,我希望第一个REST服务通过将会话ID与表示其他内容的不同字符串连接来创建一个单独的字符串,并使用分隔符值标记两个字符串之间的中断,以便String combined = sessionid+separatorcharacter+someotherstring
。为此,第二个REST服务将接受组合字符串作为@RequestParam
,然后将字符串分解为会话ID和另一个值。
我将使用String.split()
使用分隔符值来分割组合字符串的两个部分,例如:
String[] parts = string.split("separatorcharacter");
String sessionid = parts[0];
String someotherstring = parts[1];
但在创建分隔字符串两部分的标记时,我可以选择哪些字符?组合字符串将用作URL参数,因此必须能够跨越互联网在http
请求中,也永远不会出现在Spring或tomcat生成的任何会话ID中。此外,其中一个字符串将采用Base64编码,因此分隔符需要在编码/解码过程中存活。 我会在分割前进行解码,因此我们无需担心编码时使用的字符。
但是,如果重要,编码/解码是:
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class StringUtil {
private static Random random = new Random((new Date()).getTime());
public static String encrypt(String userId) {
BASE64Encoder encoder = new BASE64Encoder();
byte[] salt = new byte[8];
random.nextBytes(salt);
return encoder.encode(salt)+encoder.encode(userId.getBytes());
}
public static String decrypt(String encryptKey) {
if (encryptKey.length() > 12) {
String cipher = encryptKey.substring(12);
BASE64Decoder decoder = new BASE64Decoder();
try {
return new String(decoder.decodeBuffer(cipher));
} catch (IOException e) {}
}
return null;
}
}