/** * {@link Http.Context#args} 에 저장된 사용자 객체를 가져온다. 저장된 객체가 없을 경우 {@link UserApp#initTokenUser()} 를 * 호출해서 객체를 생성, 저장한뒤 가져온다. * * @return * @see UserApp#initTokenUser() */ private static User getUserFromContext() { Object cached = Http.Context.current().args.get(TOKEN_USER); if (cached instanceof User) { return (User) cached; } initTokenUser(); return (User) Http.Context.current().args.get(TOKEN_USER); }
/** * 토큰 정보를 이용해 생성한 사용자 객체를 {@link Http.Context#args} 에 저장한다. 생성된 사용자가 {@link User#anonymous} 가 아니고 * 존재하는 세션 정보가 없다면 세션 정보를 생성한다. * * @see UserApp#getUserFromToken() */ public static void initTokenUser() { User user = getUserFromToken(); Http.Context.current().args.put(TOKEN_USER, user); if (!user.isAnonymous() && getUserFromSession().isAnonymous()) { addUserInfoToSession(user); } }
/** * 현재 사용자가 선호하는 언어를 갱신한다. * * <p>쿠키나 Accept-Language HTTP 헤더에 선호하는 언어가 설정되어 있는 경우, 그것을 현재 로그인한 사용자가 선호하는 언어로 설정한다. */ public static void updatePreferredLanguage() { Http.Request request = Http.Context.current().request(); User user = UserApp.currentUser(); if (user.isAnonymous()) { return; } if (request.acceptLanguages().isEmpty() && request.cookie(Play.langCookieName()) == null) { return; } String code = StringUtils.left(Http.Context.current().lang().code(), 255); if (!code.equals(user.lang)) { user.lang = code; user.update(); } }