この素晴らしいプラグインhttp://grails.org/plugin/cxf-clientを使用して、セキュリティを備えたコントラクト ファーストの Web サービスを利用しています。
だから私はすでに私の設定にこのようなものを持っています:
cxf {
client {
cybersourceClient {
clientInterface = com.webhost.soapProcessor
serviceEndpointAddress = "https://webhost/soapProcessor"
wsdl = "https://webhost/consumeMe.wsdl"
secured = true
username = "myUname"
password = "myPwd"
}
}
これは非常にうまく機能しますが、ユーザーがユーザー名とパスワードを入力できるようにして、ユーザー名とパスワードを入力してサービスを利用できるようにしたいと考えています。誰もこれを行う方法を知っていますか?
デモ プロジェクトのように Custom In Interceptor を使用していると思われます。
package com.cxf.demo.security
import com.grails.cxf.client.CxfClientInterceptor
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor
import org.apache.ws.security.WSPasswordCallback
import org.apache.ws.security.handler.WSHandlerConstants
import javax.security.auth.callback.Callback
import javax.security.auth.callback.CallbackHandler
import javax.security.auth.callback.UnsupportedCallbackException
class CustomSecurityInterceptor implements CxfClientInterceptor {
String pass
String user
WSS4JOutInterceptor create() {
Map<String, Object> outProps = [:]
outProps.put(WSHandlerConstants.ACTION, org.apache.ws.security.handler.WSHandlerConstants.USERNAME_TOKEN)
outProps.put(WSHandlerConstants.USER, user)
outProps.put(WSHandlerConstants.PASSWORD_TYPE, org.apache.ws.security.WSConstants.PW_TEXT)
outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new CallbackHandler() {
void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]
pc.password = pass
pc.identifier = user
}
})
new WSS4JOutInterceptor(outProps)
}
}
しかし、私はこのインターセプターをインスタンス化していないか、インスタンス化の方法を理解していないため、インターセプターで使用されるユーザーの資格情報を取得する方法がわかりません。
これを行う方法を知っている人はいますか/サンプルコードはありますか?
ありがとう!