Active Resource può utilizzare l'autenticazione HTTP impostata a livello di classe. Per esempio:È thread-safe impostare l'autenticazione HTTP Active Resource su base per utente?
class Resource < ActiveResource::Base
end
Resource.user = 'user'
Resource.password = 'password'
o
Resource.site = "http://user:[email protected]/"
Ma cosa succede se io uso l'autenticazione HTTP diversa in base a quale utente è loggato? Se cambio Resource.user e Resource.password, ciò causerà una condizione di competizione in cui le richieste da un thread iniziano improvvisamente a utilizzare l'autenticazione di un utente le cui richieste sono eseguite simultaneamente in un thread diverso? Oppure si tratta di un problema (a condizione di reimpostare l'autenticazione tra le richieste) perché i server dei binari non sono multithread?
Anche se non ci sono problemi di sicurezza dei thread, sembra comunque rischioso che se non riesco a ripristinarli, le credenziali dell'utente precedente verranno utilizzate automaticamente dalle richieste future.
Aggiornamento: Dopo essere stato frustrato con ActiveResource, ho scritto la mia libreria RIPOSO: https://github.com/DeepWebTechnologies/well_rested
Questo vuol dire che sì, non causa una condizione di competizione? O è solo una precauzione? –
Sì, in modalità di produzione è possibile eseguire in condizioni di competizione se si desidera modificare il parametro di connessione per richiesta. L'utilizzo della variabile locale Thread risolve questo problema. –
Ho una soluzione simile per l'impostazione di 'self.site' senza problemi di race condition http://stackoverflow.com/questions/8623204/set-site-user-fields-in-activeresource/9053643#9053643 – troex