Sto utilizzando questo fantastico plug-in, http://grails.org/plugin/cxf-client, per consumare un primo servizio web con sicurezza.Come fornire credenziali dinamiche (nome utente e password) al servizio web utilizzando il plugin Grails-cxf
Così ho già avere qualcosa di simile nel mio config:
cxf {
client {
cybersourceClient {
clientInterface = com.webhost.soapProcessor
serviceEndpointAddress = "https://webhost/soapProcessor"
wsdl = "https://webhost/consumeMe.wsdl"
secured = true
username = "myUname"
password = "myPwd"
}
}
Questo funziona davvero bene, ma quello che vorrei fare ora è quello di fornire i miei utenti la possibilità di inserire un nome utente e una password in modo possono inserire il nome utente e la password per utilizzare il servizio. Qualcuno sa come fare questo?
Ho il sospetto che si sta usando un personalizzato In Interceptor come nel progetto 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)
}
}
Ma siccome io non un'istanza di questo intercettore, o capire come è istanziato, non so come posso ottenere le credenziali dell'utente utilizzate nell'intercettore.
Qualcuno sa come fare questo/avere un codice di esempio?
Grazie!
Grazie per la tua response-, ma ho lavorato il modo groovier di farlo: D – lilalfyalien
grazie- che ne dici se mi basta usare una fabbrica per specifici della sessione CustomSecurityInterceptors produrre? – lilalfyalien
@lilalfyalien Ho aggiunto qualche spiegazione in più su "RequestContextHolder". –