전체 글
-
Spring MVC - 서블릿 예외(Exception) 에 따른 필터(Filter)와 인터셉터(Interceptor) 처리Spring/Spring MVC 2022. 2. 10. 16:21
필터(Filter) DispatcherType를 이용한 중복 처리 제거 인터셉터(Interceptor)의 중복 처리 제거 서블릿 예외(Exception) 에 따른 필터와 인터셉터 처리 WAS에서는 등록된 ErrorPage의 상태 코드가 오면 해당 Path로 WAS에서 직접 URL 요청을 한다. 이때 의도치 않게 필터, 서블릿, 인터셉터도 다시 한번 호출되는데 로그인 인증 체크와 같은 경우 이미 처음 클라이언트 요청 시 필터나 인터셉터에서 로그인 체크를 완료하였다. 때문에 WAS에서 재요청 시 해당 필터와 인터셉트가 한번 더 호출되는 것은 매우 비효율적이다. 필터(Filter) DispatcherType를 이용한 중복 처리 제거 DispatcherType 중복 체크를 피하기 위해 필터에서 제공하는 옵션 어..
-
Spring MVC - 서블릿의 예외(Exception)에 따른 오류 페이지 등록(오류 페이지 작동 원리, 오류 페이지에서 오류 정보 이용하기)Spring/Spring MVC 2022. 2. 10. 15:07
Tomcat이 제공하는 기본 오류 페이지 오류 페이지 등록 오류 페이지 작동 원리 오류 페이지에서 오류 정보 이용하기 스프링 부트를 사용하면 간단하게 개발자가 만든 예외에 따른 오류 페이지를 클라이언트에게 보여줄 수 있다. 스프링 부트가 오류 페이지를 보여주는 복잡한 과정을 처리해주기 때문에 우리는 간단하게 오류 페이지를 등록할 수 있다. 그럼 내부에서 어떻게 오류 페이지를 호출하는 것일까? 서블릿에서 예외에 따른 오류 페이지를 호출하는 과정을 한번 알아보자. 서블릿의 예외(Exception)에 따른 오류 페이지 등록 일반적인 클라이언트의 요청에 따른 흐름은 다음과 같다. HTTP 요청 → WAS → 필터 → 서블릿 → 스프링 인터셉터 → 컨트롤러 웹 애플리케이션은 사용자 요청 별로 별도의 쓰레드가 할당..
-
Spring MVC - ArgumentResolver을 활용한 애노테이션 만들기Spring/Spring MVC 2022. 2. 9. 17:04
ArgumentResolver을 활용한 애노테이션 만들기 다음과 같은 핸들러가 있다 @GetMapping("/") public String homeLoginV3Spring( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { .... } 핸들러의 파라미터중 Member loginMember는 key 값으로 @SessionAttribute 어노테이션을 이용해 Session 영역에 저장되어있는 해당 Member타입의 객체를 가져온다. 잘못된 방법은 아니지만 위 방법보다 더 보기 간편하고 편리하게 사용할 수 있도록 @SessionAttribute의 모든 파라미터 설정값을 갖는..
-
Spring MVC - interceptor를 이용한 요청 로그 기록과 로그인 체크Spring/Spring MVC 2022. 2. 9. 16:47
interceptor를 이용한 요청 로그 기록과 로그인 체크 웹 페이지에서는 특정 사용자에게만 보여주는 페이지 또는 로그인을 한 사용자에게만 보여주는 페이지 등 URL에 따라 접근할 수 있는 조건을 체크해줘야 한다. 만약 URL의 접근 조건을 체크해주지 않으면 일반 사용자가 관리자 페이지로 들어갈 수 있거나 로그인을 하지 않는 사용자가 로그인한 사용자에게만 보이는 페이지(정보 수정 등)의 페이지로 들어갈 수 있는 등의 문제가 발생한다. 따라서 특정 페이지의 조건을 체크해줘야 하는데 컨트롤러에 조건을 체크하는 로직을 하나하나 작성하면 코드 중복이 발생할 뿐만 아니라 나중에 유지 보수할 때 해당 로직을 일일이 찾아서 수정해야 하는 번거로움이 생긴다. 특정 페이지의 조건을 체크하는 공통의 관심사(Cross-C..
-
Spring MVC - Filter를 이용한 요청 로그 기록과 로그인 체크Spring/Spring MVC 2022. 2. 9. 12:47
Filter를 이용한 요청 로그 기록과 로그인 체크 웹 페이지에서는 특정 사용자에게만 보여주는 페이지 또는 로그인을 한 사용자에게만 보여주는 페이지 등 URL에 따라 접근할 수 있는 조건을 체크해줘야 한다. 만약 URL의 접근 조건을 체크해주지 않으면 일반 사용자가 관리자 페이지로 들어갈 수 있거나 로그인을 하지 않는 사용자가 로그인한 사용자에게만 보이는 페이지(정보 수정 등)의 페이지로 들어갈 수 있는 등의 문제가 발생한다. 따라서 특정 페이지의 조건을 체크해줘야 하는데 컨트롤러에 조건을 체크하는 로직을 하나하나 작성하면 코드 중복이 발생할 뿐만 아니라 나중에 유지보수할 때 해당 로직을 일일이 찾아서 수정해야 하는 번거로움이 생긴다. 특정 페이지의 조건을 체크하는 공통의 관심사(Cross-Cutting..
-
Spring MVC - Session을 이용한 로그인 처리 (HttpSession, @SessionAttribute), 세션 정보 조회Spring/Spring MVC 2022. 2. 8. 22:28
Session을 이용한 로그인 처리 HttpSession은 이미 이전에 직접 구현한 Session 기능과 거의 같은 방식으로 제공해준다. 쿠키 이름은 JSESSIONID이며 값은 추정 불가능한 랜덤 값으로 되어있다. HttpSession을 이용하여 로그인 처리를 구현해보자. HttpSession을 이용한 로그인 처리 Session에 사용할 상수 HttpSession에 데이터를 보관하고 조회할 때 같은 이름이 중복되어 사용되므로 상수를 정의 public class SessionConst { public static final String LOGIN_MEMBER = "loginMember"; } 세션 생성과 조회 - 로그인 HttpSession은 HttpServletRequest를 통해 가져올 수 있다. -..
-
Spring MVC - Session을 직접 구현하여 로그인 처리Spring/Spring MVC 2022. 2. 8. 20:34
Session을 직접 구현하여 로그인 처리 Cookie를 이용하여 로그인 처리를 하게 되면 여러 가지 보안 이슈가 있었다. 이 문제를 해결하기 위해서는 로그인 정보(노출되면 안 되는 중요한 정보)는 모두 서버에 저장해야 되며 저장된 정보를 매핑할 수 있는 임의의 토큰(Sessionid)을 부여한다. Session 동작 방식 로그인 : 사용자가 로그인 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다. Session 생성 : UUID를 이용하여 세션 ID를 생성한다. 생성된 세션 ID와 세션에 로그인 정보를 서버의 세션 저장소에 보관한다. Sessionid를 응답 쿠키로 전달 : 클라이언트와 서버는 결국 쿠키로 연결이 되어야 한다. 서버는 클라이언트에게 세션 ID만 쿠키에 담아서 전달한다. 클라이언트..
-
Spring MVC - Cookie를 이용한 로그인 처리와 문제점Spring/Spring MVC 2022. 2. 8. 18:20
Cookie를 이용한 로그인 처리와 문제점 웹 페이지 화면 Cookie를 이용한 로그인 처리 로그인의 상태를 페이를 요청할 때마다 쿼리 파라미터로 전달하여 유지하는 것은 매우 어렵고 번거로운 작업이 된다. 쿼리 파라미터를 통해 로그인의 상태 정보를 전달하는 것이 아닌 Cookie를 이용하면 로그인 상태 정보를 쉽게 전달할 수 있다. 로그인 요청 시 회원의 정보와 일치하면 쿠키 생성 - 중요한 정보를 쿠키에 담지 않고 회원을 식별할 수 있는 key값을 전달 - 클라이언트에서 해당 쿠키 정보를 저장 페이지 요청 시 쿠키 정보를 전달하여 서버에서 전달받은 쿠키 정보로 회원 저장소에 저장되어 있는 회원을 확인 - 페이지 요청할 때마다 쿠키 정보를 서버에 전달 - 쿠키 정보로 로그인 상태 유지 Cookie의 종류..