Использовать аннотацию @before в игре 1.2.5?

Я хочу, чтобы сеанс был проверен перед отправкой пользователя на вход в систему - при этом каждый запрос URL приводит к проверке, является ли это действительным сеансом - если нет, отправьте его на страницу входа в систему, иначе обработайте как обычно. Если у пользователя уже есть активный сеанс, мы не будем показывать им страницу входа в систему, а перенесем их на предварительно определенную главную страницу.

Я искал в Google, связанный с ним, и узнал, что это будет сделано с помощью @Before аннотации в контроллере, но не знаю о @Before работает и как пользоваться? Я использую игру 1.2.5.

2 ответа

Вы можете использовать @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/samples-and-tests/booking.

Как сказал @emt14, вы можете сделать это с помощью модуля Play secure проще. Ознакомьтесь с примерами приложений на форуме в YOUR_PLAY_DIR/samples-and-tests/forum.

Модуль Play secure делает именно это из коробки. Он используется большинством приложений и также интегрируется с различными плагинами. Ознакомьтесь с документацией здесь.

Если вы все еще хотите реализовать это самостоятельно, вы можете использовать безопасный код в качестве примера.

В противном случае @Before может использоваться на любом из ваших статических методов контроллера и имеет доступ ко всем объектам области, включая сессию.

Другие вопросы по тегам