我在python中創建了一組XMLRPC客戶端服務器程序,並設置了一個用於身份驗證客戶端的小方法。然而,在完成了大部分代碼的編碼之後,我意識到一旦客戶端得到認證,我爲其設置的標誌就是全球性的,即只要一個客戶端通過認證,所有客戶端都通過認證。我不知道爲什麼,但我的印象是,無論何時SimpleXMLRPCServer被客戶端連接,它都會在我的程序中創建一組新的變量。針對多個客戶端的Python服務器(帶或不帶XMLRPC)
基本上它的成立,現在的方式是
class someclass:
authenticate(self, username, pass):
#do something here
if(check_for_authentication(username, pass))
self.authenticated=True
other_action(self, vars):
if authenticated:
#do whatever
else:
return "Not authorized."
server=SimpleXMLRPCServer.SimpleXMLRPCServer("0.0.0.0", 8000)
server.register_instance(someclass())
server.serve_forever()
我需要一條途徑侵入(需要爲連接每個客戶端進行設置,即在認證標誌)什麼,我期待這一點,或另一個可以更簡單地執行此操作的協議。經過一番搜索,我一直在看扭曲,但由於這是已經寫好,我寧願修改它,而不是重寫它。我現在知道我只能總是從客戶端獲得用戶名和密碼,但是在資源方面(不得不根據每個請求進行身份驗證)和節省帶寬(我的一些客戶的數量非常有限),我會而不是那樣做。另外,這是我第一次試圖確保這樣的事情(而且我沒有受過網絡安全方面的培訓),所以如果我忽略了我邏輯中的一些明顯的錯誤,請告訴我。基本上,我不能讓別人給我假變量「other_actions」
你在那裏做的方式是,認證的變量對於實例是本地的,而不是類,假設你只聲明/使用'authenticated'內部的實例方法。如果情況並非如此,則需要更新代碼以向我們展示使認證屬於類而不是實例的原因。 – agf
我改變了一點,但我不想讓變量屬於實例?我現在遇到的問題是每次連接到服務器時都沒有創建對象的新實例,這幾乎是我想要的。或者可能爲每個調用創建一個具有自己的認證變量的新線程。 –
啊,我明白了,現在回答。 – agf