Spring
-
[김영한 스프링] 38. 로그인 처리2 필터, 인터셉터 - 스프링 인터셉터 소개 & 요청 로그 & 인증 체크Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 20. 03:03
스프링 인터셉터 - 소개 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. 스프링 인터셉터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출된다. 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 된다. 스프링 MVC의 시작점이 디스패처 서블릿이라고 생각해 보면 이해가 될 것이다. 스프링 인..
-
[김영한 스프링] 37. 로그인 처리2 필터, 인터셉터 - 서블릿 필터 소개 & 요청 로그 & 인증 체크Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 19. 23:22
서블릿 필터 - 소개 공통 관심 사항 요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데 문제는 로그인하지 않은 사용자도 다음 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다는 점이다. 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 등록, 수정, 삭제, 조회 등등 상품관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 더 큰 문제는 향후 로그인과 관련된 로직이 변경될 때이다. 작성한 모든 로직을 다 수정해야 할 수 있다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-c..
-
[김영한 스프링] 36. 로그인 처리1 쿠키, 세션 - 세션 정보와 타임아웃 설정Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 18. 03:32
세션 정보와 타임아웃 설정 세션 정보 확인 SessionInfoController main/java/hello/login/web/session/SessionInfoController 생성 package hello.login.web.session; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Da..
-
[김영한 스프링] 35. 로그인 처리1 쿠키, 세션 - 로그인 처리하기(서블릿 HTTP 세션1 & 2)Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 16. 20:24
로그인 처리하기 - 서블릿 HTTP 세션1 세션이라는 개념은 대부분의 웹 애플리케이션에 필요한 것이다. 어쩌면 웹이 등장하면서부터 나온 문제이다. 서블릿은 세션을 위해 HttpSession이라는 기능을 제공하는데, 지금까지 나온 문제들을 해결해 준다. 우리가 직접 구현한 세션의 개념이 이미 구현되어 있고, 더 잘 구현되어 있다. HttpSession 소개 서블릿이 제공하는 HttpSession도 결국 우리가 직접 만든 SessionManager와 같은 방식으로 동작한다. 서블릿을 통해 HttpSession을 생성하면 다음과 같은 쿠키를 생성한다. 쿠키 이름이 JSESSIONID이고, 값은 추정 불가능한 랜덤 값이다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD..
-
[김영한 스프링] 34. 로그인 처리1 쿠키, 세션 - 로그인 처리하기(세션 동작 방식 & 세션 직접 만들기 & 직접 만든 세션 적용)Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 15. 01:29
로그인 처리하기 - 세션 동작 방식 목표 앞서 쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있었다. 이 문제를 해결하려면 결국 중요한 정보를 모두 서버에 저장해야 한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다. 이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션이라 한다. 세션 동작 방식 로그인 사용자가 loginId, password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다. 세션 생성 세션 ID를 생성하는데, 추정 불가능해야 한다. UUID는 추정이 불가능하다. Cookie: mySessionId=zz0101xx-bab9-4b92-9b32-dadb280f4b61 생성된 세션 ID와 세션에 보관할 값(memberA)을 서버..
-
[김영한 스프링] 33. 로그인 처리1 쿠키, 세션 - 로그인 기능 & 쿠키 사용 & 보안 문제Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 12. 05:03
로그인 기능 LoginService package hello.login.domain.login; import hello.login.domain.member.Member; import hello.login.domain.member.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.Optional; @Service @RequiredArgsConstructor public class LoginService { private final MemberRepository memberRepository; /** * @return null이면 로그인 실패 ..
-
[김영한 스프링] 32. 로그인 처리1 쿠키, 세션 - 홈 화면 & 회원 가입Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 12. 03:37
홈 화면 HomeController - home() 수정 package hello.login.web; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Slf4j @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } templates/home.html 추가 홈 화면 회원 가입 로그인 main/resources/templates/home.html 생성 실행 회원 가입 Membe..
-
[김영한 스프링] 31. 로그인 처리1 쿠키, 세션 - 로그인 요구사항 & 프로젝트 생성 & 세팅Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 8. 02:21
로그인 요구사항 홈 화면 - 로그인 전 회원 가입 로그인 홈 화면 - 로그인 후 본인 이름(누구님 환영합니다.) 상품 관리 로그 아웃 보안 요구사항 로그인 사용자만 상품에 접근하고, 관리할 수 있음 로그인 하지 않은 사용자가 상품 관리에 접근하면 로그인 화면으로 이동 회원 가입, 상품 관리 홈 화면 - 로그인 전 홈 화면 - 로그인 후 회원 가입 로그인 상품 관리 프로젝트 생성 이름 변경 다운로드한 파일 중 "login-start"를 원하는 곳으로 이동 후 "login"으로 이름변경 프로젝트 열기 build.gradle 열기 설정 설정 -> 파일 인코딩 -> 프로퍼티 파일에 대한 디폴트 인코딩을 UTF-8로 변경 설정 -> Gradle -> Intelij IDEA로 변경 실행 ItemServiceAppl..