SORU
25 EKİM 2011, Salı


İş Parçacığı güvenliği.[] mevcut raylar içinde kullanımı

Thread.current karma (örneğin, örnein, geçerli etki alanı, vb.) bilgi saklama uygulamaları hakkında çelişkili görüşler almaya devam ediyorum. Teknik model katmanında daha sonra işlemeyi kolaylaştırmak için bir yol (sorgu kapsamı, denetim, vb.) olarak ileri sürülmüştür.

Birçok MVC deseni kırıyor çünkü bu uygulama kabul edilemez düşünün. Diğerleri güvenilirliği yaklaşımı/güvenlik, ve benim 2 sorum olacak ikinci yönü üzerinde duruluyor ilgili kaygılarını dile.

  1. Thread.current karma kullanılabilir olması sağlanır ve tek bir yanıt, özel tüm döngüsü boyunca?

  2. Bir iş parçacığı, bir yanıt sonunda, diğer gelen istekler için kullanılır, böylece herhangi bir bilgi Thread.current saklanan sızıntı teslim edilecektir anlıyorum. Takas yanıt (kumanda Thread.current[:user] = nil yürüterek örneğin after_filter) sona ermeden önce bu bilgileri güvenlik ihlali önlemede yeterli olur mu?

Teşekkürler! Giuseppe

CEVAP
28 Kasım 2011, PAZARTESİ


Uzak iş parçacığı yerel değişkenleri kalmak için özel bir nedeni yok, ana konular şunlardır:

  • kullandığı kod test olunca iş parçacığı yerel değişkenleri ayarlamak için hatırlamak zorunda kalacak kadar zor onları test etmek
  • iplik yerliler kullanan sınıflar, bu nesneler değildir bu bilgiye ihtiyacınız olacakmevcutonlar için ama konu yerel bir değişken içinde ve yönlendirme bu tür genellikle law of demeter keser
  • temizlik iş parçacığı yerel halk eğer çerçeve kullanıyorsa bir sorun olabilir konuları (iş parçacığı yerel değişkeni zaten başlatılan ve kod dayanır||=değişkenleri başlatmak için çağrıları başarısız olabilir

Tamamen konu dışı kullanmak için değil iseiyiyaklaşım değil kullanmak, ama zaman zaman vur duvara nerede bir iş parçacığı yerel olacak en basit Olası çözüm olmadan değişen çok şey kod ve sen-ecek var uzlaşma, bir daha az mükemmel bir nesne odaklı model ile iplik yerel veya değişen çok Kanunu aynı.

Yani, genelde bir maddenin düşünce hangi olacak en iyi çözüm bu durumda ve eğer gerçekten de gidiyorsun aşağı parçacığı yerel yol, kesinlikle tavsiye ederim sana bunu engelleyen hatırlamak temizledikten sonra, aşağıdaki gibi:

around_filter :do_with_current_user

def do_with_current_user
    Thread.current[:current_user] = self.current_user
    begin
        yield
    ensure
        Thread.current[:current_user] = nil
    end      
end

Bu iş parçacığı yerel değişkeni eğer bu konuyu geri kullanılmadan önce temizlenmiş olmasını sağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008