if (isRequestor(message)) {
IssuedToken itok = (IssuedToken)ais.iterator().next().getAssertion();
SecurityToken tok = retrieveCachedToken(message);
if (tok == null) {
STSClient client = STSUtils.getClient(message, "sts", itok);
AddressingProperties maps =
(AddressingProperties)message
.get("javax.xml.ws.addressing.context.outbound");
if (maps == null) {
maps = (AddressingProperties)message
.get("javax.xml.ws.addressing.context");
}
synchronized (client) {
try {
// Transpose ActAs/OnBehalfOf info from original request to the STS client.
Object token =
message.getContextualProperty(SecurityConstants.STS_TOKEN_ACT_AS);
if (token != null) {
client.setActAs(token);
}
token =
message.getContextualProperty(SecurityConstants.STS_TOKEN_ON_BEHALF_OF);
if (token != null) {
client.setOnBehalfOf(token);
}
Map<String, Object> ctx = client.getRequestContext();
mapSecurityProps(message, ctx);
Object o = message.getContextualProperty(SecurityConstants.STS_APPLIES_TO);
String appliesTo = o == null ? null : o.toString();
appliesTo = appliesTo == null
? message.getContextualProperty(Message.ENDPOINT_ADDRESS).toString()
: appliesTo;
boolean enableAppliesTo = client.isEnableAppliesTo();
client.setMessage(message);
Element onBehalfOfToken = client.getOnBehalfOfToken();
Element actAsToken = client.getActAsToken();
SecurityToken secToken =
handleDelegation(
message, onBehalfOfToken, actAsToken, appliesTo, enableAppliesTo
);
if (secToken == null) {
secToken = getTokenFromSTS(message, client, aim, maps, itok, appliesTo);
}
tok = secToken;
storeDelegationTokens(
message, tok, onBehalfOfToken, actAsToken, appliesTo, enableAppliesTo
);
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new Fault(e);
} finally {
client.setTrust((Trust10)null);
client.setTrust((Trust13)null);
client.setTemplate(null);
client.setAddressingNamespace(null);
}
}
} else {
tok = renewToken(message, aim, itok, tok);
}