Spring
스프링 MVC 2 - 로그인 처리하기 - 직접 만든 세션 적용
스프링 MVC 2 - 로그인 처리하기 - 직접 만든 세션 적용
2022.09.19로그인 처리하기 - 직접 만든 세션 적용 지금까지 개발한 세션 관리 기능을 실제 웹 애플리케이션에 적용해보자. LoginController - loginV2() 기존 login()의 @PostMapping("/login") 주석 처리 private final SessionManager sessionManager; 주입 sessionManager.createSession(loginMember, response); 로그인 성공시 세션을 등록한다. 세션에 loginMember를 저장해두고, 쿠키도 함께 발행한다. LoginController - logoutV2() 기존 logout()의 @PostMapping("/logout") 주석 처리 로그 아웃시 해당 세션의 정보를 제거한다. HomeController ..
스프링 MVC 2 - 로그인 처리하기 - 세션 직접 만들기
스프링 MVC 2 - 로그인 처리하기 - 세션 직접 만들기
2022.09.17로그인 처리하기 - 세션 직접 만들기 세션을 직접 개발해서 적용해보자. 세션 관리는 크게 다음 3가지 기능을 제공하면 된다. 세션 생성 sessionId 생성 (임의의 추정 불가능한 랜덤 값) 세션 저장소에 sessionId와 보관할 값 저장 sessionId로 응답 쿠키를 생성해서 클라이언트에 전달 세션 조회 클라이언트가 요청한 sessionId 쿠키의 값으로, 세션 저장소에 보관한 값 조회 세션 만료 클라이언트가 요청한 sessionId 쿠키의 값으로, 세션 저장소에 보관한 sessionId와 값 제거 SessionManager - 세션 관리 로직은 어렵지 않아서 쉽게 이해가 될 것이다. @Component: 스프링 빈으로 자동 등록한다. ConcurrentHashMap: HashMap은 동시 요청에..
스프링 MVC 2 - 로그인 처리하기 - 세션 동작 방식
스프링 MVC 2 - 로그인 처리하기 - 세션 동작 방식
2022.09.16로그인 처리하기 - 세션 동작 방식 목표 앞서 쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있었다. 이 문제를 해결하려면 결국 중요한 정보를 모두 서버에 저장해야 한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다. 이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션이라 한다. 세션 동작 방식 세션을 어떻게 개발할지 먼저 개념을 이해해보자. 로그인 사용자가 loginId, password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다. 세션 생성 세션 ID를 생성하는데, 추정 불가능해야 한다. UUID는 추정이 불가능하다. Cookie: mySessionId=zz0101xx-bab9-4b92-9b32-dadb280f4b61 생성된 세션..
스프링 MVC 2 - 쿠키와 보안 문제
스프링 MVC 2 - 쿠키와 보안 문제
2022.09.15쿠키와 보안 문제 쿠키를 사용해서 로그인 Id를 전달해서 로그인을 유지할 수 있었다. 그런데 여기에는 심각한 보안 문제가 있다. 보안 문제 쿠키 값은 임의로 변경할 수 있다. 클라이언트가 쿠키를 강제로 변경하면 다른 사용자가 된다. 실제 웹 브라우저 개발자모드 → Application → Cookie 변경으로 확인 Cookie: memberId=1 → Cookie: memberId=2 (다른 사용자의 이름이 보임) 쿠키에 보관된 정보는 훔쳐갈 수 있다. 만약 쿠키에 개인정보나, 신용카드 정보가 있다면? 이 정보가 웹 브라우저에도 보관되고, 네트워크 요청마다 계속 클라이언트에서 서버로 전달된다. 쿠키의 정보가 나의 로컬 PC에서 털릴 수 있고, 네트워크 전송 구간에서 털릴 수도 있다. 해커가 쿠키를 한번 ..
스프링 MVC 2 - 로그인 처리하기 - 쿠키 사용
스프링 MVC 2 - 로그인 처리하기 - 쿠키 사용
2022.09.11로그인 처리하기 - 쿠키 사용 쿠키를 사용해서 로그인, 로그아웃 기능을 구현해보자. 로그인 상태 유지하기 로그인의 상태를 어떻게 유지할 수 있을까? HTTP 강의에서 일부 설명했지만, 쿼리 파라미터를 계속 유지하면서 보내는 것은 매우 어렵고 번거로운 작업이다. 쿠키를 사용해보자. 쿠키 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달한다. 그러면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다. 쿠키 생성 클라이언트 쿠키 전달1 클라이언트 쿠키 전달2 쿠키에는 영속 쿠키와 세션 쿠키가 있다. 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키: 만료 날짜는 생략하면 브라우저 종료시 까지만 유지 브라우저 종료시 로그아웃이 되길 기대하므로, 우리에게 필요한 것은 세션 쿠키..
스프링 MVC 2 - 로그인 기능
스프링 MVC 2 - 로그인 기능
2022.09.11로그인 기능 로그인 기능을 개발해보자. 지금은 로그인 ID, 비밀번호를 입력하는 부분에 집중하자. LoginService 로그인의 핵심 비즈니스 로직은 회원을 조직한 다음에 파라미터로 넘어온 password와 비교해서 같으면 회원을 반환하고, 만약 password가 다르면 null을 반환한다. LoginForm LoginController 로그인 컨트롤러는 로그인 서비스를 호출해서 로그인에 성공하면 홈 화면으로 이동하고, 로그인에 실패하면 bindingResult.reject()를 사용해서 글로벌 오류(ObjectError)를 생성한다. 그리고 정보를 다시 입력하도록 로그인 폼을 뷰 템플릿으로 사용한다. 로그인 폼 뷰 템플릿 templates/login/loginForm.html 로그인 폼 뷰 템플릿에는..