THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block |
---|
public class WSBasicAuthenticationServicePolicyInterceptor implements Interceptor { public static final QName policySetQName = new QName(Constants.SCA10_TUSCANY_NS, "wsBasicAuthentication"); private Invoker next; private Operation operation; private PolicySet policySet = null; private String context; private WSBasicAuthenticationPolicy policy; public WSBasicAuthenticationServicePolicyInterceptor(String context, Operation operation, PolicySet policySet) { super(); this.operation = operation; this.policySet = policySet; this.context = context; init(); } private void init() { if (policySet != null) { for (Object policyObject : policySet.getPolicies()){ if (policyObject instanceof WSBasicAuthenticationPolicy){ policy = (WSBasicAuthenticationPolicy)policyObject; break; } } } } public Message invoke(Message msg) { Object[] header = msg.getHeader(); Map httpHeaderProperties = (Map)Object[0]; String basicAuthString = (String)httpHeaderProperties.get("Authorization"); String decodedBasicAuthString = null; String username = null; String password = null; if (basicAuthString != null) { basicAuthString = basicAuthString.trim(); if (basicAuthString.startsWith("Basic ")) { decodedBasicAuthString = new String(Base64.decode(basicAuthString.substring(6))); } int collonIndex = decodedBasicAuthString.indexOf(':'); if (collonIndex == -1){ username = decodedBasicAuthString; } else { username = decodedBasicAuthString.substring(0, collonIndex); password = decodedBasicAuthString.substring(collonIndex + 1); } // could call out here to some 3rd part system to do whatever you // need to turn credentials into a principal msg.getQoSContext().put(Message.QOS_CTX_SECURITY_PRINCIPAL, username); } return getNext().invoke(msg); } public Invoker getNext() { return next; } public void setNext(Invoker next) { this.next = next; } } |
Code Block |
---|
public class WSBasicAuthenticationReferencePolicyAxisOptions {
public WSBasicAuthenticationReferencePolicyAxisOptions(){
}
public void setServiceOptions(ServiceClient serviceClient) {
}
public void setOperationOptions(OperationClient operationClient, Message msg) {
// get security context
String securityPrincipal = (String)msg.getQoSContext().get(Message.QOS_CTX_SECURITY_PRINCIPAL);
String username = null;
String password = null;
// could use the security principal to look up basic auth credentials
if ( securityPrincipal != null ) {
// look up usename and password based on security principal
} else {
// take the message username and password
username = (String)msg.getQoSContext().get(WSBasicAuthenticationPolicy.WS_BASIC_AUTHENTICATION_USERNAME);
password = (String)msg.getQoSContext().get(WSBasicAuthenticationPolicy.WS_BASIC_AUTHENTICATION_PASSWORD);
}
if (username == null || password == null ){
throw new ServiceRuntimeException("Basic authenication username or password is null");
}
HttpTransportProperties.Authenticator authenticator = new HttpTransportProperties.Authenticator();
List<String> auth = new ArrayList<String>();
auth.add(Authenticator.BASIC);
authenticator.setAuthSchemes(auth);
authenticator.setPreemptiveAuthentication(true);
authenticator.setUsername(username);
authenticator.setPassword(password);
operationClient.getOptions().setProperty(HTTPConstants.AUTHENTICATE,
authenticator);
}
public void setMessageOptions(MessageContext messageContext) {
}
}
|
Confidentiality - WS Security
...