Статьи

Как реализовать время ожидания сеанса в Play Framework 2

Если вы следуете руководству по Play Framework 2 для реализации аутентификации: http: // www .playframe work .com / d o c u m t t t i o n / 2. 2. 2 / J a v a G u i de4 — вы заметите, что в Play Framework 2 тайм-аут сеанса отсутствует. в Play Framework 1, но Play Framework 2 следует другому подходу.

Если вы хотите внедрить свой собственный тайм-аут сеанса, а затем следуйте руководству по настройке аутентификации , расширив Security.Authenticator , и сохраните метку времени в сеансе и продолжайте расширять ее каждый раз, когда делается запрос.

Вот как я это сделал:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Secured extends Security.Authenticator {
  
    public static final String UNAUTHENTICATED = "unauthenticated";
  
    public static User getLoggedInUser() {
        if (session("userId") == null)
            return null;
        return User.findById(Long.parseLong(session("userId")));
    }
  
    public static String getLoggedInUsername() {
        if (session("userId") == null)
            return null;
        return User.findById(Long.parseLong(session("userId"))).getUsername();
    }
  
  
    @Override
    public String getUsername(Http.Context ctx) {
  
        // see if user is logged in
        if (session("userId") == null)
            return null;
  
        // see if the session is expired
        String previousTick = session("userTime");
        if (previousTick != null && !previousTick.equals("")) {
            long previousT = Long.valueOf(previousTick);
            long currentT = new Date().getTime();
            long timeout = Long.valueOf(Play.application().configuration().getString("sessionTimeout")) * 1000 * 60;
            if ((currentT - previousT) > timeout) {
                // session expired
                session().clear();
                return null;
            }
        }
  
        // update time in session
        String tickString = Long.toString(new Date().getTime());
        session("userTime", tickString);
  
        return User.findById(Long.parseLong(session("userId"))).getUsername();
    }
}

Затем просто добавьте sessionTimeout=15 (в минутах) в файл conf.

Ссылка: Как реализовать время ожидания сеанса в Play Framework 2 от нашего партнера по JCG Брайана Портера из блога Poornerd .