我嘗試製作一個與會員和非會員區玩的網站。所以我有成員和非成員方法的控制器。但我只能使整個控制器安全[@With(Secure.class)]。 是否可能只有幾個方法安全並訪問其他人沒有登錄?使用安全和非安全方法播放框架控制器。可能?
謝謝
我嘗試製作一個與會員和非會員區玩的網站。所以我有成員和非成員方法的控制器。但我只能使整個控制器安全[@With(Secure.class)]。 是否可能只有幾個方法安全並訪問其他人沒有登錄?使用安全和非安全方法播放框架控制器。可能?
謝謝
是的,你可以這樣做。刪除@With註釋,當你想限制訪問連接的用戶使用安全控制器的這種方法:
Secure.checkAccess();
使用這種方法,你甚至可以用@Check註解。例如:
@Check("member")
public static void restrictedAction() {
Secure.checkAccess();
...
}
不,沒有簡單的方法來做到這一點。您可以檢查角色,但不能連接用戶,訪問者。
您將不得不添加@Before
註釋,這將會有點複雜。只需將您的控制器分解爲多個控制器。順便說一下,函數最好是這樣做,而不是混合公有/私有方法。
您可以使用鎖舌模塊,它是相當強大:http://www.playframework.org/modules/deadbolt
是的,你可以,但它需要的安全類的一些調整。如果你檢查@Secure,它有一個用@Before註解的方法。根據documentation,您可以指出@Before應用於哪些方法以及跳過哪些方法。
@Before(unless="login")
所以這將是一個在公共方法上不運行@Before的問題。請注意,使用@With可能無法正常工作,您可能需要在管理安全性的控制器中創建自己的@Before(在安全中調用正確的方法)。
但是,只有2個控制器會更簡單,一個用於安全用戶,另一個用於公共方法。
我向上推薦了兩個控制器的建議。我遇到了這個問題,因爲'Before'註解不能正確使用應該跳過的'unless'數組方法名稱。你提到它可能無法正確使用'With',這是我的情況。你有更多的信息,爲什麼呢?錯誤或設計副作用?謝謝! – palako
你有沒有試過從模塊內的控制器調用checkAccess方法?它似乎沒有工作。它會拋出該方法不可見的錯誤。事實上,當你看到方法的定義時,默認情況下它沒有被指定爲公共的。它是如何在應用程序控制器中沒有任何問題的情況下工作的? – preslavrachev