Использовать аннотацию @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 может использоваться на любом из ваших статических методов контроллера и имеет доступ ко всем объектам области, включая сессию.