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 String username = (String)msg.getQoSContext().get(WSBasicAuthenticationPolicy.WS_BASIC_AUTHENTICATION_USERNAME); a principal String password = (String)msg.getQoSContext().get(WSBasicAuthenticationPolicy.WS_BASIC_AUTHENTICATION_PASSWORD); 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; } } |
...