ログイン処理-セッションv 2
前回のリリースに続いて、今回はサーブレットが提供するセッションを使用してログインを実現します.
見てみましょう
サーブレットはセッションにHttpSessionという機能を提供します.直接実装されたセッションが実装され、よりよく実装されています.
HttpSession...
HttpSessionでデータを格納してクエリーする場合、同じ名前を繰り返し使用するため定数が定義されます.
セッションを作成するには、リクエストします.getSession(true)を使用すればよい.
public HttpSession getSession(boolean create);
セッションのcreateオプションについて説明します.
request.getSession(true)
セッションがある場合は、既存のセッションを返します.
セッションがない場合は、新しいセッションを作成して返します.
request.getSession(false)
セッションがある場合は、既存のセッションを返します.
セッションがない場合は、新しいセッションは作成されません.nullを返します.
request.getSession():新しいセッションを作成するリクエスト.getSessionと同じ
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
セッションにデータを保存する方法はrequestです.setAttribute(..) に似ている1つのセッションの複数の値
ちょぞう
JESSIONID Cookieが正しく作成されていることを確認
整理する
見てみましょう
サーブレットはセッションにHttpSessionという機能を提供します.直接実装されたセッションが実装され、よりよく実装されています.
HttpSession...
サーブレットが提供するHttpSessionは、最終的には自分が作成したSessionManagerと同じ方法で動作します.サーブレットによるHttpSessionの作成により、次のCookieが生成されます.Cookie名はJESSIONIDで、値は推定不可能なランダム値です.
Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05
👊サーブレットが提供するHttpSessionを使用して開発しましょう。
SessionConst
SessionConst
public abstract class SessionConst {
public static final String LOGIN_MEMBER = "loginMember";
}
LoginController - login()
@PostMapping("/login")
public String login(@Validated @ModelAttribute LoginForm loginForm,
BindingResult bindingResult,
HttpServletRequest request){
if(bindingResult.hasErrors()){
return "login/loginForm";
}
Member loginMember = loginService.login(loginForm.getLoginId(), loginForm.getPassword());
if(loginMember == null){
bindingResult.reject("loginFail","아이디 또는 패스워드가 일치하지 않습니다");
return "/login/loginForm";
}
//로그인 성공 처리
//세션이 있으면 있는 세션반환 , 없으면 신규 세션을 생성
HttpSession session = request.getSession();
//세션에 로그인 회원 정보 보관
session.setAttribute(SessionConst.LOGIN_MEMBER,loginMember);
return "redirect:/";
}
セッションの作成と表示
セッションを作成するには、リクエストします.getSession(true)を使用すればよい.
public HttpSession getSession(boolean create);
セッションのcreateオプションについて説明します.
request.getSession(true)
セッションがある場合は、既存のセッションを返します.
セッションがない場合は、新しいセッションを作成して返します.
request.getSession(false)
セッションがある場合は、既存のセッションを返します.
セッションがない場合は、新しいセッションは作成されません.nullを返します.
request.getSession():新しいセッションを作成するリクエスト.getSessionと同じ
セッションにログインメンバー情報を保持
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
セッションにデータを保存する方法はrequestです.setAttribute(..) に似ている1つのセッションの複数の値
ちょぞう
LoginController - logout()
@PostMapping("/logout")
public String logout(HttpServletResponse response, HttpServletRequest request){
HttpSession session = request.getSession(false);
if(session != null){
session.invalidate(); //세션을 제거한다.
}
return "redirect:/";
}
HomeController - homeLogin()
@GetMapping("/")
public String homeLogin(HttpServletRequest request, Model model) {
// request.getSession(false): request.getSession()를 사용하면
// 기본값이 create : true 이므로, 로그인 하지 않을 사용자도 의미없는 세션이
//만들어진다. 따라서 세션을 찾아서 사용하는 시점에는 create:false옵션을 사용해
// 세션을 생성하지 않아야 한다.
HttpSession session = request.getSession(false);
if(session == null){
return "home";
}
Member loginmember = (Member)
// 로그인 시점에 세션에 보관한 회원 객체를 찾는다.
session.getAttribute(SessionConst.LOGIN_MEMBER);
//세션에 회원 데이터가 없으면 home
if(loginmember == null){
return "home";
}
model.addAttribute("member",loginmember);
return "loginHome";
}
ログイン結果
JESSIONID Cookieが正しく作成されていることを確認
整理する
前回のリリースで自らセッションを作成し、今回のリリースではサーブレットが提供するHttpSessionを使用してログインを実現しました.
開発者がセッションを直接実装しなくても、サーブレットが提供する機能を使用して容易に実装できます.
このようにサーブレットが提供する機能もあり、Springはセッションを作成する機能も提供しています.
以下のプレゼンテーションでは、スプリングが提供する機能を使用してログインを実現します.
Reference
この問題について(ログイン処理-セッションv 2), 我々は、より多くの情報をここで見つけました
https://velog.io/@yangtaeyoung93/로그인-처리방식-세션-v2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(ログイン処理-セッションv 2), 我々は、より多くの情報をここで見つけました https://velog.io/@yangtaeyoung93/로그인-처리방식-세션-v2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol