2011-06-19 48 views
1

我正在使用Play Framework開發Web服務。我的下一步是使用模塊安全登錄。然而,即時得到一個空指針異常,如下所示:Play Framework:如何使用POST登錄?

play.exceptions.JavaExecutionException 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:227) 
at Invocation.HTTP Request(Play!) 
Caused by: java.lang.NullPointerException 
at play.utils.Java.invokeStaticOrParent(Java.java:146) 
at controllers.Secure$Security.invoke(Secure.java:193) 
at controllers.Secure$Security.access$0(Secure.java:184) 
at controllers.Secure.authenticate(Secure.java:61) 
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:540) 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:498) 
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:474) 
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:469) 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:157) 
... 1 more 

根據Playframework Secure module: how do you "log in" to test a secured controller in a FunctionalTest?有可能做一個帖子/登錄,這也是我已經測試和它完美的作品在一個測試用例。

要重新創建空指針異常做到以下幾點:

  1. 列表項
  2. 創建一個新項目
  3. 添加模塊安全作爲依賴
  4. 安裝依賴「打的依賴性」
  5. 重新啓動Web應用程序。
  6. 發送信息到/ login。我添加了兩個請求標頭(用戶名和密碼),但是有和沒有任何標頭時都會發生異常。該帖子(在我的情況下)是使用REST Client for Firefox發送的。

感謝您的幫助!

+0

你可以分享你的控制器方法和路線嗎? – lobster1234

+0

你可以請你分享你的路線和應用程序代碼?請 – Varundroid

回答

1

它看起來像你的用戶名或密碼爲空。由於您正在發佈登錄操作,因此您應該將用戶名和密碼作爲編碼請求主體的一部分發送,但聽起來您可能正在做一些不同的事情(或者我錯誤地理解了添加請求標頭的含義)。

這可能是安全模塊中的一個bug,因爲我想這種情況應該稍微處理一些。您得到NullPointerException的原因是因爲invokeStaticOrParent需要確定參數的類型以確定要調用哪個方法,並且在嘗試調用getClass()時引發null參數的情況下會引發異常。

安全模塊中的身份驗證行動也許應該標記密碼參數作爲@Required,並試圖調用底層authentify /身份驗證方法之前,對validation.hasErrors()執行的,而不是像後,現在做了檢查。

實際上甚至有一個existing ticket與此相關,但我不知道取得了哪些進展。稍後我會檢查是否有未決的提交來解決這個問題,如果沒有,我會看看我可以做些什麼來提交補丁。

+0

你是對的。你沒有誤解我。我以錯誤的方式添加了用戶名和密碼。 – user521048

相關問題