在当前使用的wso2/wso2mi Docker 映像中ENV JAVA_VERSION=jdk-11.0.10+9
,是否可以降级或升级此 Java 版本?
我为什么要找这个?
我ENV JAVA_VERSION=jdk-11.0.10+9
在我的应用程序中遇到了一个奇怪的问题,我们的 SOAP Web 服务抛出
{
"httpCode": 502,
"userMessage": "Invalid response from remote host",
"developerMessage": "The creation time is ahead of the current time.",
"details": {
"detail": "wsse:InvalidSecurityToken"
},
"errorCode": "S:Sender",
"timeStamp": 1624875331996,
"transactionId": "CIP-urn:uuid:b813c0a1-da6a-4dfe-8647-7237f39de941"
}
当我们使用 lower[ 1.2.0-centos7
] 版本 时,相同的代码工作正常,wso2/wso2mi
所以我想wso2/wso2mi
用不同的 Java 版本进行测试。
不确定这段代码是否对不同的 java 版本有一些魔力。
private void addSecurityHeader(MessageContext mc, String username, String password) throws Exception {
SecureRandom rand = SecureRandom.getInstance("SHA1PRNG");
rand.setSeed(System.currentTimeMillis());
byte[] nonceBytes = new byte[16];
rand.nextBytes(nonceBytes);
String createdDate = DateTimeFormatter.ISO_OFFSET_DATE_TIME.withZone(ZoneId.of("UTC")).format(Instant.now());
byte[] createdDateBytes = createdDate.getBytes();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
stream.write(nonceBytes);
stream.write(createdDateBytes);
stream.write(password.getBytes(StandardCharsets.UTF_8));
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] passwordDigest = md.digest(stream.toByteArray());
SOAPEnvelope envelope = mc.getEnvelope();
OMFactory factory = envelope.getOMFactory();
OMNamespace securityNamespace = factory.createOMNamespace(
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse");
SOAPHeaderBlock securityBlock = envelope.getHeader().addHeaderBlock("Security", securityNamespace);
securityBlock.setMustUnderstand(true);
OMElement usernameTokenElement = factory.createOMElement("UsernameToken", securityNamespace);
OMNamespace namespaceWSU = factory.createOMNamespace(
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "wsu");
OMAttribute attribute = factory.createOMAttribute("Id", namespaceWSU, "SOAI_req_SOAI");
usernameTokenElement.addAttribute(attribute);
securityBlock.addChild(usernameTokenElement);
OMElement usernameElement = factory.createOMElement("Username", securityNamespace);
usernameElement.setText(username);
usernameTokenElement.addChild(usernameElement);
OMElement passwordElement = factory.createOMElement("Password", securityNamespace);
attribute = factory.createOMAttribute("Type", null,
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest");
passwordElement.addAttribute(attribute);
passwordElement.setText(new String(Base64.encodeBase64(passwordDigest), StandardCharsets.UTF_8));
usernameTokenElement.addChild(passwordElement);
OMElement nonceElement = factory.createOMElement("Nonce", securityNamespace);
attribute = factory.createOMAttribute("EncodingType", null,
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
nonceElement.addAttribute(attribute);
nonceElement.setText(new String(Base64.encodeBase64(nonceBytes), StandardCharsets.UTF_8));
usernameTokenElement.addChild(nonceElement);
OMElement createdElement = factory.createOMElement("Created", securityNamespace);
createdElement.setText(createdDate);
usernameTokenElement.addChild(createdElement);
}
编辑 1
所以我尝试使用我们自己的 Docker 文件来创建图像,这是内容
FROM wso2/wso2mi:4.0.0
FROM adoptopenjdk/openjdk8:jdk8u232-b09-slim
COPY /lib/* $WSO2_SERVER_HOME/lib/
COPY /carFiles/api_common-20.11.0-SNAPSHOT.car $WSO2_SERVER_HOME/repository/deployment/server/carbonapps/
COPY /carFiles/api_impl-20.11.0-SNAPSHOT.car $WSO2_SERVER_HOME/repository/deployment/server/carbonapps/
COPY /carFiles/api-20.11.0-SNAPSHOT.car $WSO2_SERVER_HOME/repository/deployment/server/carbonapps/
在此构建之后将用于部署到 Docker+Kubernetes 环境中。