2017-04-03 71 views
0

我使用一些Web服务与SAP进行通信。这些服务是使用RAD中的向导生成的。在部署描述的WS绑定中定义了标准登录。如何在调用一个特定的Web服务时覆盖身份验证?

SAP团队现在希望我使用当前用户的登录详细信息调用一个特定服务,而不是使用标准登录。系统会提示用户输入登录详细信息,并将这些信息存储在会话中。

我以为我需要使用javax.security.auth.callback.CallbackHandler但我不能立即看到如何访问用户的会话。

我可以手动创建SOAP请求并自己设置身份验证,但我宁愿使用向导来处理所有服务。

在运行时重写Web服务的身份验证的最佳方式是什么?

回答

0

这就是我一直在寻找:https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.iseries.doc/ae/twbs_confighttpbasicauthprog.html

Properties prop = new Properties(); 
InitialContext ctx = new InitialContext(prop); 
Service service = (Service)ctx.lookup("java:comp/env/service/StockQuoteService"); 
QName portQname = new QName("http://httpchannel.test.wsfvt.ws.ibm.com", "StockQuoteHttp"); 
StockQuote sq = (StockQuote)service.getPort(portQname, StockQuote.class); 
((javax.xml.rpc.Stub) sq)._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, "myUser"); 
((javax.xml.rpc.Stub) sq)._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, "myPwd");