簡體   English   中英

在播放1.2.5中使用@before注釋?

[英]use @before annotation in play 1.2.5?

我希望在將用戶發送到登錄名之前檢查會話-從而每個URL請求都將檢查是否來自有效會話-如果不是,請將其發送到登錄頁面,否則按常規進行處理。 如果用戶已經有一個活動會話,我們將不向他們顯示登錄頁面,而是將他們帶到預定義的主頁。

我在Google上搜索了與此相關的信息,並知道它將通過在控制器中使用@Before注解來完成,但不了解@Before工作方式以及如何使用? 我正在使用播放1.2.5。

您可以使用@Before這樣:

@Before
static void addUser() {
    User user = connected();
    if(user != null) {
        renderArgs.put("user", user);
    }
}

static User connected() {
    if(renderArgs.get("user") != null) {
        return renderArgs.get("user", User.class);
    }
    // Find your user from session
    String username = session.get("user");
    if(username != null) {
        return User.find("byUsername", username).first();
    } 
    return null;
}

// ~~render your login if the user is not finded in session

public static void index() {
    if(connected() != null) {
         render();
    }
    login();
}

您可以在YOUR_PLAY_DIR /示例和測試/預訂中找到此示例代碼。

正如@ emt14所說,您可以使用Play安全模塊更輕松地完成此操作。 在YOUR_PLAY_DIR / samples-and-tests / forum中查看論壇應用示例。

Play安全模塊開箱即用。 大多數應用程序都使用它,並且還與其他插件集成。 此處查看文檔。

如果仍要自己實現,則可以使用安全代碼作為示例。

否則, @ Before可以在您的任何控制器靜態方法上使用,並且可以訪問所有作用域對象,包括會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM