現在私は、ソースコードリディングを行っているのですが、このコードを使用すればログイン時に最新のものが更新されるということは確認できました。
しかし、「//現在のログインユーザの前回のログイン時間を取得」の部分のコードについて、何故今回の新しいログイン日時を更新するために必要なのかという部分まで理解することが出来ませんでした。
このコードを記述する理由を教えていただきたいです。
* ログイン成功時の処理 */ @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { var targetUrl = ""; // DateTimeFormatterクラスを使用して日付オブジェクトの作成 DateTimeFormatter localDatetimeFormat = DateTimeFormatter.ofPattern("yyyy/MM/dd"); //現在のログインユーザのログイン履歴のリスト List<TLoginHistoryCustom> searchTLoginHistoryByLoginUser = tLoginHistoryService.search("", ((CustomerUserDetails)authentication.getPrincipal())); if (searchTLoginHistoryByLoginUser.size() != 0) { // 現在のログインユーザの前回のログイン時間を取得 ((CustomerUserDetails)authentication.getPrincipal()).setLoginDatetime(searchTLoginHistoryByLoginUser.get(0).getId().getLoginDatetime().format(localDatetimeFormat)); } //ログイン履歴テーブルに挿入 tLoginHistoryService.insert(((CustomerUserDetails)authentication.getPrincipal()).getMAccount().getUserId(), request, LoginResult.SUCCESS); if(authentication != null && authentication.getPrincipal()!=null && authentication.getPrincipal() instanceof CustomerUserDetails && ((CustomerUserDetails)authentication.getPrincipal()).getMAccount() != null) { //パスワード変更フラグが「0(未変更)」の場合 if(((CustomerUserDetails)authentication.getPrincipal()).getMAccount().getPwdchgFlg() == PwdchgFlg.UNCHANGED) { targetUrl = "/auth/passwordChange"; }else { targetUrl = "/success"; } } // targetUrlにリダイレクトする String referer = request.getHeader("referer"); redirectStrategy.sendRedirect(request, response, referer.replaceAll(request.getContextPath() + ".*", "") + request.getContextPath() + targetUrl); }
回答1件
あなたの回答
tips
プレビュー