스프링 부트 - 오류 페이지2 BasicErrorController가 제공하는 기본 정보들 BasicErrorController 컨트롤러는 다음 정보를 model에 담아서 뷰에 전달한다. 뷰 템플릿은 이 값을 활용해서 출력할 수 있다. 오류 정보 추가 - reso
지금까지 예외 처리 페이지를 만들기 위해서 다음과 같은 복잡한 과정을 거쳤다.WebServerCustomizer 를 만들고예외 종류에 따라서 ErrorPage 를 추가하고예외 처리용 컨트롤러 ErrorPageController 를 만듬스프링 부트는 이런 과정을 모두 기
인터셉터 중복 호출 제거앞서 필터의 경우에는 필터를 등록할 때 어떤 DispatcherType 인 경우에 필터를 적용할 지 선택할 수있었다. 그런데 인터셉터는 서블릿이 제공하는 기능이 아니라 스프링이 제공하는 기능이다. 따라서DispatcherType 과 무관하게 항상
목표예외 처리에 따른 필터와 인터셉터 그리고 서블릿이 제공하는 DispatchType 이해하기예외 발생과 오류 페이지 요청 흐름오류가 발생하면 오류 페이지를 출력하기 위해 WAS 내부에서 다시 한번 호출이 발생한다. 이때 필터,서블릿, 인터셉터도 모두 다시 호출된다.
서블릿은 Exception (예외)가 발생해서 서블릿 밖으로 전달되거나 또는 response.sendError() 가 호출되었을 때 설정된 오류 페이지를 찾는다.예외 발생 흐름sendError 흐름WAS는 해당 예외를 처리하는 오류 페이지 정보를 확인한다.new Err
서블릿 컨테이너가 제공하는 기본 예외 처리 화면은 고객 친화적이지 않다. 서블릿이 제공하는 오류 화면기능을 사용해보자.서블릿은 Exception (예외)가 발생해서 서블릿 밖으로 전달되거나 또는 response.sendError() 가 호출되었을 때 각각의 상황에 맞춘
스프링이 아닌 순수 서블릿 컨테이너는 예외를 어떻게 처리하는지 알아보자.서블릿은 다음 2가지 방식으로 예외 처리를 지원한다.Exception (예외)response.sendError(HTTP 상태 코드, 오류 메시지)자바의 메인 메서드를 직접 실행하는 경우 main 이
스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성https://start.spring.io프로젝트 선택Project: Gradle ProjectLanguage: JavaSpring Boot: 2.5.xProject MetadataGroup: hello
homeLoginV3Spring() 의 @GetMapping 주석 처리다음에 설명하는 @Login 애노테이션을 만들어야 컴파일 오류가 사라진다.@Login 애노테이션이 있으면 직접 만든 ArgumentResolver 가 동작해서 자동으로 세션에 있는 로그인회원을 찾아주
서블릿 필터에서 사용했던 인증 체크 기능을 스프링 인터셉터로 개발해보자.서블릿 필터와 비교해서 코드가 매우 간결하다. 인증이라는 것은 컨트롤러 호출 전에만 호출되면 된다.따라서 preHandle 만 구현하면 된다.순서 주의, 세밀한 설정 가능인터셉터와 필터가 중복되지
String uuid = UUID.randomUUID().toString()요청 로그를 구분하기 위한 uuid 를 생성한다.request.setAttribute(LOG_ID, uuid)서블릿 필터의 경우 지역변수로 해결이 가능하지만, 스프링 인터셉터는 호출 시점이 완전
스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다.서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위
드디어 인증 체크 필터를 개발해보자. 로그인 되지 않은 사용자는 상품 관리 뿐만 아니라 미래에 개발될페이지에도 접근하지 못하도록 하자.whitelist = {"/", "/members/add", "/login", "/logout","/css/\*"};인증 필터를 적용해
필터가 정말 수문장 역할을 잘 하는지 확인하기 위해 가장 단순한 필터인, 모든 요청을 로그로 남기는 필터를개발하고 적용해보자public class LogFilter implements Filter {}필터를 사용하려면 필터 인터페이스를 구현해야 한다.doFilter(S
요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다.앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데문제는 로그인 하지 않은 사용자도 다음 URL을 직접 호출하면 상품 관리 화면에 들어갈
세션이 제공하는 정보들을 확인해보자.sessionId : 세션Id, JSESSIONID 의 값이다. 예) 34B14F008AA3527C9F8ED620EFD7A4E1maxInactiveInterval : 세션의 유효 시간, 예) 1800초, (30분)creationTim
스프링은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute 을 지원한다.이미 로그인 된 사용자를 찾을 때는 다음과 같이 사용하면 된다. 참고로 이 기능은 세션을 생성하지 않는다.@SessionAttribute(name = "loginMember",
세션이라는 개념은 대부분의 웹 애플리케이션에 필요한 것이다. 어쩌면 웹이 등장하면서 부터 나온 문제이다.서블릿은 세션을 위해 HttpSession 이라는 기능을 제공하는데, 지금까지 나온 문제들을 해결해준다.우리가 직접 구현한 세션의 개념이 이미 구현되어 있고, 더 잘
지금까지 개발한 세션 관리 기능을 실제 웹 애플리케이션에 적용해보자기존 login() 의 @PostMapping("/login") 주석 처리private final SessionManager sessionManager; 주입sessionManager.createSess
세션을 직접 개발해서 적용해보자.세션 관리는 크게 다음 3가지 기능을 제공하면 된다.세션 생성sessionId 생성 (임의의 추정 불가능한 랜덤 값)세션 저장소에 sessionId와 보관할 값 저장sessionId로 응답 쿠키를 생성해서 클라이언트에 전달세션 조회클라이