It looks like WebLogic or another Interceptor is blocking the execution of my interceptor. If I send weblogics username and password then it will pass and run my interceptor.
Regards, Néstor On Tue, Jun 9, 2015 at 5:59 AM, Colm O hEigeartaigh <[email protected]> wrote: > I tested the following and it does result in a Basic Auth header being > created: > > > ((BindingProvider)port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, > "alice"); > > ((BindingProvider)port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, > "clarinet"); > > It sounds like the problem is in your interceptor on the receiving side, > and not on the client side. Enable message logging to take a look at the > request + make sure that the header is being correctly added to the > request. > > Colm. > > On Mon, Jun 8, 2015 at 10:28 PM, Néstor Boscán <[email protected]> wrote: > > > Hi > > > > I created a web service with an interceptor for Basic Authentication: > > > > public class BasicAuthorizationInterceptor extends SoapHeaderInterceptor > { > > protected static final Logger logger = > > LoggerFactory.getLogger(BasicAuthorizationInterceptor.class); > > > > private WhitePagesBf whitePagesBf; > > > > @Override > > public void handleMessage(Message message) throws Fault { > > AuthorizationPolicy policy = > > message.get(AuthorizationPolicy.class); > > > > if (policy == null) { > > sendErrorResponse(message, > > HttpURLConnection.HTTP_UNAUTHORIZED); > > return; > > } > > > > if (!authenticate(policy.getUserName(), policy.getPassword())) { > > logger.warn("Invalid username or password for user: " + > > policy.getUserName()); > > sendErrorResponse(message, HttpURLConnection.HTTP_FORBIDDEN); > > } > > } > > > > private boolean authenticate(String userName, String password) { > > ... > > } > > > > private void sendErrorResponse(Message message, int responseCode) { > > Message outMessage = getOutMessage(message); > > outMessage.put(Message.RESPONSE_CODE, responseCode); > > > > Map responseHeaders = (Map) > message.get(Message.PROTOCOL_HEADERS); > > if (responseHeaders != null) { > > responseHeaders.put("WWW-Authenticate", Arrays.asList(new > > String[]{"Basic realm=realm"})); > > responseHeaders.put("Content-length", Arrays.asList(new > > String[]{"0"})); > > } > > message.getInterceptorChain().abort(); > > try { > > getConduit(message).prepare(outMessage); > > close(outMessage); > > } catch (IOException e) { > > logger.warn(e.getMessage(), e); > > } > > } > > > > private Message getOutMessage(Message inMessage) { > > Exchange exchange = inMessage.getExchange(); > > Message outMessage = exchange.getOutMessage(); > > if (outMessage == null) { > > Endpoint endpoint = exchange.get(Endpoint.class); > > outMessage = endpoint.getBinding().createMessage(); > > exchange.setOutMessage(outMessage); > > } > > outMessage.putAll(inMessage); > > return outMessage; > > } > > > > private Conduit getConduit(Message inMessage) throws IOException { > > Exchange exchange = inMessage.getExchange(); > > EndpointReferenceType target = > > exchange.get(EndpointReferenceType.class); > > Conduit conduit = > > exchange.getDestination().getBackChannel(inMessage, null, target); > > exchange.setConduit(conduit); > > return conduit; > > } > > > > private void close(Message outMessage) throws IOException { > > OutputStream os = outMessage.getContent(OutputStream.class); > > os.flush(); > > os.close(); > > } > > > > public void setWhitePagesBf(WhitePagesBf whitePagesBf) { > > this.whitePagesBf = whitePagesBf; > > } > > > > public WhitePagesBf getWhitePagesBf() { > > return whitePagesBf; > > } > > } > > > > I'm trying to invoke this web service setting the username and password > > like this: > > > > ((BindingProvider) > > client).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, > > username); > > ((BindingProvider) > > client).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, > > password); > > > > But when I invoke in the Interceptor the policy Object is null. > > > > Any ideas? > > > > Regards, > > > > Néstor > > > > > > -- > Colm O hEigeartaigh > > Talend Community Coder > http://coders.talend.com >
