Używam tej niesamowitej wtyczki, http://grails.org/plugin/cxf-client, do korzystania z pierwszej usługi serwisowej z zabezpieczeniami.Jak zapewnić dynamiczne poświadczenia (nazwa użytkownika i hasło) do usługi sieciowej za pomocą wtyczki Grails-cxf
Więc mam już coś takiego w moim config:
cxf {
client {
cybersourceClient {
clientInterface = com.webhost.soapProcessor
serviceEndpointAddress = "https://webhost/soapProcessor"
wsdl = "https://webhost/consumeMe.wsdl"
secured = true
username = "myUname"
password = "myPwd"
}
}
To działa bardzo dobrze, ale to, co chciałbym teraz zrobić jest zapewnienie moje użytkownikom możliwość, aby wprowadzić nazwę użytkownika i hasło, mogą wpisać swoją nazwę użytkownika i hasło, aby skorzystać z usługi. Czy ktoś wie, jak to zrobić?
Podejrzewam, że to przy użyciu niestandardowego w Interceptor jak w projekcie demo:
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)
}
}
Ale jak nie instancję tej przechwytujących lub zrozumieć jak to instancja, nie wiem, jak mogę dostać poświadczenia użytkownika używane w przechwytywaczu.
Czy ktoś wie, jak to zrobić/masz jakiś przykładowy kod?
Dzięki!
Dzięki za response- ale wypracowaliśmy Groovier sposób to zrobić: D – lilalfyalien
Thanks- jak o tym, czy po prostu użyć fabrykę sesyjnych specyficznego CustomSecurityInterceptors produkują? – lilalfyalien
@lilalfyalien Dodałem trochę więcej wyjaśnień 'RequestContextHolder'. –